Andengine Demo Nullpointer

时间:2012-04-03 16:24:21

标签: android andengine

我想创建一个简单的游戏,我想使用andengine。

所以我决定用这段代码测试库:

public class PrisonBreakActivity extends BaseGameActivity  {

    private ZoomCamera mCamera;
    private BitmapTextureAtlas mTexture;
    private TextureRegion mFaceTextureRegion;
    private Scene mScene;

    private static final int CAMERA_WIDTH = 720;
    private static final int CAMERA_HEIGHT = 480;

    /** Called when the activity is first created. */

    @Override
    public Engine onLoadEngine() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onLoadResources() {
        this.mTexture = new BitmapTextureAtlas(64, 64, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
        this.mFaceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mTexture, this, "gfx/man.png", 0, 0);

        this.mEngine.getTextureManager().loadTexture(this.mTexture);

    }

    @Override
    public Scene onLoadScene() {
        this.mEngine.registerUpdateHandler(new FPSLogger());

        this.mScene = new Scene();
        this.mScene.setBackground(new ColorBackground(0.09804f, 0.6274f, 0.8784f));

        this.mScene.setOnSceneTouchListener(new IOnSceneTouchListener() {
                @Override
                public boolean onSceneTouchEvent(Scene pScene,
                        TouchEvent pSceneTouchEvent) {
                    // TODO Auto-generated method stub
                    if(pSceneTouchEvent.isActionDown()) {
                        PrisonBreakActivity.this.loadNewTexture();
                }

                return true;
                }
        });

        return this.mScene;
    }

    @Override
    public void onLoadComplete() {
        // TODO Auto-generated method stub

    }

    private void loadNewTexture() {

        MathUtils mu = new MathUtils();

         //final TextureRegion faceTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mTexture, this, "gfx/man.png", 0, 0);
        final float x = (CAMERA_WIDTH - mFaceTextureRegion.getWidth()) * mu.RANDOM.nextFloat();
        final float y = (CAMERA_HEIGHT - mFaceTextureRegion.getHeight()) * mu.RANDOM.nextFloat();
        final Sprite clickToUnload = new Sprite(x, y, mFaceTextureRegion);
        this.mScene.attachChild(clickToUnload);
}
}

我总是在库中获得NullPointerException(BaseGameActivity)。 Image man.png位于/ asset / gfx /.

GameBaseActivity (from Andengine, Error in applyEngineOptions):

    @Override
    protected void onCreate(final Bundle pSavedInstanceState) {
        super.onCreate(pSavedInstanceState);
        this.mPaused = true;

        this.mEngine = this.onLoadEngine();

        this.applyEngineOptions(this.mEngine.getEngineOptions());

        this.onSetContentView();
    }

错误:

  

04-03 16:22:27.238:E / AndroidRuntime(425):at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)

     

04-03 16:22:27.238:E / AndroidRuntime(425):at   android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)

     

04-03 16:22:27.238:E / AndroidRuntime(425):at   android.app.ActivityThread.access $ 2300(ActivityThread.java:125)   04-03   16:22:27.238:E / AndroidRuntime(425):at   android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2033)

     

04-03 16:22:27.238:E / AndroidRuntime(425):at   android.os.Handler.dispatchMessage(Handler.java:99)   04-03   16:22:27.238:E / AndroidRuntime(425):at   android.os.Looper.loop(Looper.java:123)   04-03 16:22:27.238:   E / AndroidRuntime(425):at   android.app.ActivityThread.main(ActivityThread.java:4627)   04-03   16:22:27.238:E / AndroidRuntime(425):at   java.lang.reflect.Method.invokeNative(Native Method)   04-03   16:22:27.238:E / AndroidRuntime(425):at   java.lang.reflect.Method.invoke(Method.java:521)   04-03 16:22:27.238:   E / AndroidRuntime(425):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:868)   04-03 16:22:27.238:E / AndroidRuntime(425):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)    04-03   16:22:27.238:E / AndroidRuntime(425):at   dalvik.system.NativeStart.main(本机方法)    04-03 16:22:27.238:   E / AndroidRuntime(425):引起:java.lang.NullPointerException   04-03   16:22:27.238:E / AndroidRuntime(425):at   org.anddev.andengine.ui.activity.BaseGameActivity.onCreate(BaseGameActivity.java:65)   04-03 16:22:27.238:E / AndroidRuntime(425):at   android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)   04-03 16:22:27.238:E / AndroidRuntime(425):at   android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)

请帮忙。

1 个答案:

答案 0 :(得分:3)

你的方法

public Engine onLoadEngine() {
        // TODO Auto-generated method stub
        return null;
    }

返回null。查看BaseGameActivity的源代码,您将看到在onCreate中它尝试通过调用来设置它的mEngine变量 this.mEngine = this.onLoadEngine();调用你的onLoadEngine()方法并返回null

接下来,它尝试使用调用this.applyEngineOptions(this.mEngine.getEngineOptions());

从该变量访问方法

因为此时mEngine为null,它将抛出空指针异常。

完成onLoadEngine方法以正确初始化Engine并修复nullpointerexception

参考:BaseGameActivity source code