有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java和Engine无法加载菜单场景(OnCreateSecene)

在andengine中加载菜单场景时遇到问题。我似乎无法理解错误信息/背后的原因

日志类别:

01-12 14:44:25.883: E/AndEngine(2899): GameActivity.onCreateScene failed. @(Thread: 'GLThread 7465')
01-12 14:44:25.883: E/AndEngine(2899): java.lang.NullPointerException
01-12 14:44:25.883: E/AndEngine(2899):  at com.saleem.dig.scene.SceneManager.setMenuScene(SceneManager.java:31)
01-12 14:44:25.883: E/AndEngine(2899):  at com.saleem.dig.GameActivity.onCreateScene(GameActivity.java:54)
01-12 14:44:25.883: E/AndEngine(2899):  at org.andengine.ui.activity.BaseGameActivity$3.onCreateResourcesFinished(BaseGameActivity.java:171)
01-12 14:44:25.883: E/AndEngine(2899):  at com.saleem.dig.GameActivity.onCreateResources(GameActivity.java:47)
01-12 14:44:25.883: E/AndEngine(2899):  at org.andengine.ui.activity.BaseGameActivity.onCreateGame(BaseGameActivity.java:183)
01-12 14:44:25.883: E/AndEngine(2899):  at org.andengine.ui.activity.BaseGameActivity.onSurfaceCreated(BaseGameActivity.java:112)
01-12 14:44:25.883: E/AndEngine(2899):  at org.andengine.opengl.view.EngineRenderer.onSurfaceCreated(EngineRenderer.java:80)
01-12 14:44:25.883: E/AndEngine(2899):  at 安卓.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1501)
01-12 14:44:25.883: E/AndEngine(2899):  at 安卓.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)

我认为可能是代码导致了这种情况: 游戏活动。爪哇

public class GameActivity extends BaseGameActivity {
    private Camera camera;
    private int CAMERA_WIDTH;
    private int CAMERA_HEIGHT;

    @Override
    public EngineOptions onCreateEngineOptions() {
        // TODO Auto-generated method stub

        CAMERA_WIDTH = this.getResources().getDisplayMetrics().widthPixels;// retrieves
                                                                            // the
                                                                            // native
                                                                            // width
        CAMERA_HEIGHT = this.getResources().getDisplayMetrics().heightPixels;// retrieves
                                                                                // the
                                                                                // native
                                                                                // height
        camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
        EngineOptions engineOptions = new EngineOptions(true,
                ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(),
                camera);
        engineOptions.getAudioOptions().setNeedsMusic(true).setNeedsSound(true);
        engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
        engineOptions.getTouchOptions().setNeedsMultiTouch(true);

        return engineOptions;

    }

    @Override
    public void onCreateResources(OnCreateResourcesCallback pOnCreateSceneCallback) {
        ResourceManager.prepareManager(getEngine(), this, camera,
                getVertexBufferObjectManager());

        pOnCreateSceneCallback.onCreateResourcesFinished();

    }

    @Override
    public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) {
        // TODO Auto-generated method stub
       SceneManager.getInstance().setMenuScene(pOnCreateSceneCallback);

    }

    @Override
    public void onPopulateScene(Scene arg0, OnPopulateSceneCallback pOnCreateSceneCallback) {
        pOnCreateSceneCallback.onPopulateSceneFinished();
        // TODO Auto-generated method stub

    }

}

SceneManager可能是查明问题的有用工具:

public class SceneManager {

    private BaseScene menuScene;
    private BaseScene gameScene;

    private static final SceneManager INSTANCE = new SceneManager();

    private BaseScene currentScene;
    private Engine engine = ResourceManager.getInstance().engine;

    public enum SceneType {
        SCENE_MENU,
        SCENE_GAME,
    }

    public void setScene(BaseScene scene) {
        engine.setScene(scene);
        currentScene = scene;
    }

    public void setMenuScene(OnCreateSceneCallback pOnCreateSceneCallback) {
        ResourceManager.getInstance().loadMenuResources();
        menuScene = new MainMenuScene();
        currentScene.createScene();
        pOnCreateSceneCallback.onCreateSceneFinished(menuScene);
    }

    public void setScene(SceneType type) {
        switch (type) {

        case SCENE_MENU:
            setScene(menuScene);
            break;
        case SCENE_GAME:
            setScene(gameScene);
            break;
        }
    }

    public static SceneManager getInstance() {
        return INSTANCE;
    }

    public BaseScene getCurrentScene() {
        return currentScene;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    我认为你从来没有设定过currentScene。所以当你调用currentScene.createScene();时,你会得到NullPointerException 可能需要在onPopulateScene方法中设置currentScene。此外,在调用 SceneManager.getInstance().setMenuScene(pOnCreateSceneCallback);