3

ButtonSpriteの問題に出くわしたとき、私は昨夜転がっていました。私は以前にこれを行ったことがあると断言できました-それはとても簡単に思えます-しかし、AndEngineExamples が提供するコードを使用することは実際には意味がなく、エラーが発生します (たとえば、漠然とした「run()」メソッドはなぜすべての単一のタッチイベントへの応答?)

だから私は理にかなっていると思われることをしました。

private void loadScenes()
{
    mainScene = new Scene();
    menu = new Sprite(0, 0, menuTextureRegion, mEngine.getVertexBufferObjectManager()){
        @Override
        protected void preDraw(GLState pGLState, Camera pCamera) 
        {
            super.preDraw(pGLState, pCamera);
            pGLState.enableDither();
        }
    };

    newgamebutton = new ButtonSprite(25, 200, newgameTextureRegion, mEngine.getVertexBufferObjectManager());
    multiplayerbutton = new ButtonSprite(25, 310, multiplayerTextureRegion, mEngine.getVertexBufferObjectManager());

    menu.setScale(1.65f);
    menu.setPosition((CAMERA_WIDTH - menu.getWidth()) * 0.5f, (CAMERA_HEIGHT - menu.getHeight()) * 0.5f);

    mainScene.attachChild(menu);
    mainScene.attachChild(newgamebutton);
    mainScene.attachChild(multiplayerbutton);

    mainScene.registerTouchArea(multiplayerbutton);
    mainScene.setTouchAreaBindingOnActionDownEnabled(true);

    multiplayerbutton.onAreaTouched(mButtonTouched, multiplayerbutton.getWidth(), multiplayerbutton.getHeight());

    if(mButtonTouched.isActionDown()) {
        mainScene.detachChild(menu);
        mainScene.detachChild(multiplayerbutton);
    }

}

それは理にかなっているようです。「マルチプレイヤー ボタン」が押されると、mButtonTouched が与えられ、それが押されると、メニューとマルチプレイヤー ボタンが切り離されます。これは明らかに私がテストしているだけであり、実際のプロジェクトの一部ではありません. また、さまざまなサイトで、マルチプレイヤー ボタンの前に「public boolean」を配置する必要があると書かれていますが、Eclipse にはそれがありません。

皆さんはすでにこれを理解していると確信していますが、私は AndEngine の超初心者です。助けてくれてありがとう、みんな!

4

1 に答える 1

4

コードを見た後、私はあなたが次のようなことをしたいと思ったと思います:

ButtonSprite button = new ButtonSprite(25, 310, multiplayerTextureRegion, mEngine.getVertexBufferObjectManager()) {
       @Override
       public boolean onAreaTouched(TouchEvent pTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
           if(pTouchEvent.isActionDown()) {
               mainScene.detachChild(menu);
               mainScene.detachChild(multiplayerbutton);
           }
           return super.onAreaTouched(pTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
       }
};

最後の if ステートメントが実際には意味をなさないため、コードは機能しません。メソッド loadScenes() の実行時にボタンが押されたかどうかをチェックしています。匿名の内部クラスを読むことをお勧めします。それらを使用することが AndEngine で有効かつ有用なアプローチであることを理解するのに長い時間がかかりました。

ボタンを管理する別の方法の基本的な例を次に示します。

mScene.setOnAreaTouchListener(new IOnAreaTouchListener() {
    @Override
    public boolean onAreaTouched(TouchEvent pSceneTouchEvent, ITouchArea pTouchArea, float pTouchAreaLocalX, float pTouchAreaLocalY) {
        if (pTouchArea.equals(button) {
            doSomething();
            return true;
        }
        return false;
    }
});

これはシェイプに触れた場合にのみ機能することに注意してください。シェイプの外部でタッチ イベントを検出する場合は、代わりに IOnSceneTouchListener を使用する必要があります。

于 2012-08-14T08:52:38.063 に答える