2013-11-09 4 views
0

Я новичок в AndEngine, и я пытаюсь создать сцену с меню всего одним нажатием кнопки, состоящим только из метки.Android: MenuScene с AndEngine

Вот код

public class TestActivity extends SimpleBaseGameActivity implements IOnMenuItemClickListener 
{ 
    static final int CAMERA_WIDTH = 800; 
    static final int CAMERA_HEIGHT = 480; 
    Camera mCamera; 
    @Override 
    public EngineOptions onCreateEngineOptions() 
    { 
     mCamera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); 
     return new EngineOptions(true, 
           ScreenOrientation.LANDSCAPE_SENSOR, 
           new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), 
           mCamera); 
    } 

    @Override 
    protected void onCreateResources() 
    { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    protected Scene onCreateScene() 
    { 
     //Scene scene = new Scene(); 
     //scene.setBackground(new Background(0.09804f, 0.6274f, 0)); 
     //Entity layer = new Entity(); 
     //scene.attachChild(layer); 

     Font mFont = FontFactory.create(this.getFontManager(), 
             this.getTextureManager(), 
             256, 256, 
             Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 
             32); 
     mFont.load(); 

     //Text centerText = new Text(100, 40, mFont, "Hello AndEngine!\nYou can even have multilined text!", new TextOptions(HorizontalAlign.CENTER), this.getVertexBufferObjectManager()); 
     //layer.attachChild(centerText); 

     TextMenuItem playText = new TextMenuItem(1, mFont, "TEXT_TO_DISPLAY", 
               this.getVertexBufferObjectManager()); 
     MenuScene ms = new MenuScene(); 
     ms.addMenuItem(playText); 
     ms.setBackground(new Background(0.09804f, 0.6274f, 0)); 
     //ms.buildAnimations(); 
     //ms.setBackgroundEnabled(false); 

     ms.setOnMenuItemClickListener(this); 
     //scene.attachChild(ms); 

     return ms; 
    } 

    @Override 
    public boolean onMenuItemClicked(MenuScene pMenuScene, IMenuItem pMenuItem, 
            float pMenuItemLocalX, float pMenuItemLocalY) 
    { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

сбой приложения, и я не могу, как это исправить

здесь журнал кот трассировки стека

11-09 07:57:17.670: E/dalvikvm(3960): GC_EXPLICIT freed 186K, 42% free 8192K/13955K, paused 21ms+64ms, total 212ms 
11-09 07:57:17.900: E/dalvikvm(3960): GC_EXPLICIT freed 68K, 42% free 8172K/13955K, paused 118ms+33ms, total 179ms 
11-09 07:57:17.910: W/dalvikvm(3960): threadid=13: thread exiting with uncaught exception (group=0x4187c438) 

Я заметил, что если я раскомментирую buildAnimations() Я получаю исключение nullPointer

+0

показать стек трассировки в logcat. –

+0

logcat info пожалуйста, тогда мы сможем разобраться с проблемой. –

+0

В вашем коде используется только конструктор по умолчанию класса 'MenuScene', и вы не связывали с ним камеру (используйте' setCamera() '). Или вы можете попробовать использовать другие конструкторы 'MenuScene'. –

ответ

4

В AndEngine, MenuScene расширяет CameraScene, и для правильной работы CameraScene ему нужна ссылка на объект камеры.

Если вы используете конструктор по умолчанию для создания объекта MenuScene, вам необходимо настроить объект Camera (через метод setCamera()), прежде чем AndEngine начнет обновлять сцену (для чего потребуется действительный объект камеры). Или вы можете напрямую использовать другие конструкторы с параметром Camera.

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