2014-01-12 1 views
0

andengine에서 메뉴 장면을로드하는 데 문제가 있습니다. 오류 메시지/추론을 이해할 수 없습니다.AndEngine 메뉴 장면을로드 할 수 없습니다 (OnCreateScene)

로그인 고양이 : 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 

    } 

} 

씬 매니저는 문제를 정확히 파악할 수있는 helpfull 도구가 될 수있다 :

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

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) 

내가 생각하는 코드 것은이 원인이 될 수 있습니다

+0

정말로 이것을 할 수 있습니까? '개인 BaseScene menuScene; 개인 BaseScene gameScene; ' – jmroyalty

답변

0

나는 currentScene을 설정하지 않는다고 생각합니다. 따라서 NullPointerException을 호출 할 때 currentScene.createScene(); onPopulateScene 메서드에서 currentScene을 설정해야 할 수 있습니다. 또한 호출하기 전에 초기화하기 위해 약간의 수정이 필요합니다. SceneManager.getInstance().setMenuScene(pOnCreateSceneCallback);