Visualizzazione stampabile
-
problema con andengine
ciao a tutti ho un piccolo problema.... apparentemente il codice scritto è tutto ok eppure una volta in runtime crassha e in logcat mi riempie di rosso :p
questo è il logcat
codice:
08-23 10:22:54.723: W/dalvikvm(1196): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
08-23 10:22:54.743: E/AndroidRuntime(1196): FATAL EXCEPTION: main
08-23 10:22:54.743: E/AndroidRuntime(1196): java.lang.NullPointerException
08-23 10:22:54.743: E/AndroidRuntime(1196): at com.example.facem.MainActivity.onLoadScene(MainActivity.java:113)
08-23 10:22:54.743: E/AndroidRuntime(1196): at org.anddev.andengine.ui.activity.BaseGameActivity.doResume(BaseGameActivity.java:169)
08-23 10:22:54.743: E/AndroidRuntime(1196): at org.anddev.andengine.ui.activity.BaseGameActivity.onWindowFocusChanged(BaseGameActivity.java:85)
08-23 10:22:54.743: E/AndroidRuntime(1196): at com.android.internal.policy.impl.PhoneWindow$DecorView.onWindowFocusChanged(PhoneWindow.java:2366)
08-23 10:22:54.743: E/AndroidRuntime(1196): at android.view.View.dispatchWindowFocusChanged(View.java:5735)
08-23 10:22:54.743: E/AndroidRuntime(1196): at android.view.ViewGroup.dispatchWindowFocusChanged(ViewGroup.java:851)
08-23 10:22:54.743: E/AndroidRuntime(1196): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2557)
08-23 10:22:54.743: E/AndroidRuntime(1196): at android.os.Handler.dispatchMessage(Handler.java:99)
08-23 10:22:54.743: E/AndroidRuntime(1196): at android.os.Looper.loop(Looper.java:137)
08-23 10:22:54.743: E/AndroidRuntime(1196): at android.app.ActivityThread.main(ActivityThread.java:4424)
08-23 10:22:54.743: E/AndroidRuntime(1196): at java.lang.reflect.Method.invokeNative(Native Method)
08-23 10:22:54.743: E/AndroidRuntime(1196): at java.lang.reflect.Method.invoke(Method.java:511)
08-23 10:22:54.743: E/AndroidRuntime(1196): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
08-23 10:22:54.743: E/AndroidRuntime(1196): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
08-23 10:22:54.743: E/AndroidRuntime(1196): at dalvik.system.NativeStart.main(Native Method)
08-23 10:22:55.323: I/dalvikvm(1196): threadid=3: reacting to signal 3
08-23 10:22:55.343: I/dalvikvm(1196): Wrote stack traces to '/data/anr/traces.txt'
e questo è il codice
codice:
package com.example.facem;
import java.util.Random;
import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.primitive.Line;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.entity.sprite.Sprite;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.anddev.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlasTextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TextureRegion;
import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
import org.anddev.andengine.ui.activity.BaseGameActivity;
import android.annotation.SuppressLint;
import android.view.Display;
@SuppressLint("ParserError")
public class MainActivity extends BaseGameActivity {
/*
* instanzio telecamera
*/
//larghezza camera
private int CAMERA_WIDTH;
//altezza camera
private int CAMERA_HEIGHT;
//Camera
private Camera mCamera;
/*
* instanzio grafica
*/
//instanzio la texture
private BitmapTextureAtlas fT;
//instanzio la region della texture
private TextureRegion fTR;
//carico il motore
public Engine onLoadEngine() {
//setto la grandezza dello schermo in base al dispositivo
final Display dis = getWindowManager().getDefaultDisplay();
CAMERA_WIDTH = dis.getWidth();
CAMERA_HEIGHT = dis.getHeight();
//parametrizzo la camera
mCamera =new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
//parametrizzo engine
EngineOptions eo = new EngineOptions(true, ScreenOrientation.PORTRAIT, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),mCamera);
//ritorno l'engine con le opzioni
return new Engine(eo);
}
//carico le risorse
public void onLoadResources() {
/* Inizializziamo la Texure */
this.fT = new BitmapTextureAtlas(64, 64, TextureOptions.BILINEAR);
//setto la cartella del png
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
//creiamo la texture region a partire dal png scelto
fTR = BitmapTextureAtlasTextureRegionFactory.createFromAsset(fT, this, "face.png", 0, 0);
//carico le texture nel motore
mEngine.getTextureManager().loadTexture(fT);
}
public Scene onLoadScene() {
//dichiaro le scene
final Scene scene = new Scene();
//SETTO IL BAK
scene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));
/* Ricaviamo le coordinate del centro della scena */
final int x = ((CAMERA_WIDTH - fTR.getWidth()) / 2);
final int y = ((CAMERA_HEIGHT - fTR.getHeight()) / 2);
//creo lo sprite
final Sprite face = new Sprite(x,y,fTR)
//gestisco il drug and drop
{
@Override
public boolean onAreaTouched(TouchEvent ev , float pSTAX, float pSTAY) {
this.setPosition(ev.getX() - this.getWidth() / 2, ev.getY() - this.getHeight() / 2);
return true;
}
};
//ingrandisco lo sprite
face.setScale(3);
//rendo draggabile lo sprite
scene.registerTouchArea(face);
scene.setTouchAreaBindingEnabled(true);
//attacco la linea alla scena
scene.getLastChild().attachChild(face);
return scene;
}
public void onLoadComplete() {
}
}
qualche idea?
grazie mille ;)
-
Ciao, se sviluppi su Eclipse, dalla finestra del logcat puoi fare doppioclick su di una riga e, se questa riferisce una riga del tuo codice, ti porterà direttamente li.
Ora il tuo logcat segnala un NullPointerException.
La riga successiva indica riga 113 di MainActivity.java, che ad occhio e croce dovrebbe essere :
codice:
//attacco la linea alla scena
scene.getLastChild().attachChild(face);
In pratica credo ti dia errore perchè non hai ancora attaccato nulla a Scene, quindi getLastChild() ritona null, a quel punto la chiamata .attacChild(face) genera l'eccezione.
Ora non ricordo molto di AndEngine, ma credo che Scene abbia anche un altro modo (forse un attachChild(Entity) diretto) per aggiungere figli alla scena.
ciao