2014-01-12 2 views
0

У меня возникла проблема с загрузкой сцены меню в andengine. Похоже, я не могу понять сообщение об ошибке/аргументацию.AndEngine Не удается загрузить сцену меню (OnCreateScene)

Вход кошка:

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 android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1501) 
01-12 14:44:25.883: E/AndEngine(2899): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 

код я думаю, что может быть причиной этого: GameActivity.Java

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; 
    } 
} 
+0

Вы действительно можете это сделать? 'private BaseScene menuScene; частная игра BaseSceneScene; ' – jmroyalty

ответ

0

Я думаю, что вы не устанавливаете currentScene когда-либо. Таким образом, вы получаете NullPointerException при вызове currentScene.createScene(); Возможно, вам нужно будет установить currentScene в методе onPopulateScene. Также вам потребуются некоторые изменения, чтобы инициализировать его до вызова SceneManager.getInstance().setMenuScene(pOnCreateSceneCallback);

Смежные вопросы