0

Andengineでゲームを開発しています。ゲームコントローラーのボタンにHUDを使用しました。しかし、バグがありました。バグは、ボタンを押して、isActionUpなしでボタンの外側に指を移動すると、ボタンが常に押されたままになることです。 .どうすれば解決できますか? .isActionOutside() 機能を試しましたが、うまくいきません!

私が使用するボタンのこのコード:

ButtonSprite left = new  ButtonSprite(75, 75, ResourcesManager.getInstance().leftButtonRegion, vbom) {
        @Override
        public boolean onAreaTouched(TouchEvent pTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
            if(pTouchEvent.isActionDown()) {
               this.setCurrentTileIndex(1);
               player.moveX(-3);
            }
            if(pTouchEvent.isActionOutside() || pTouchEvent.isActionUp()) {
                this.setCurrentTileIndex(0);
                player.stopMovingX();
             }
            return super.onAreaTouched(pTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
        }
    };
    gameHUD.registerTouchArea(left);
    gameHUD.attachChild(left);
4

3 に答える 3

0

ユーザーの操作に応じて、ACTION_UPまたはの少なくとも 1 つを取得する必要があります。ACTION_OUTSIDE取得したすべての s をデバッグすることをお勧めします。つまり、メソッド内に呼び出し行をTouchEvent追加し、指がボタンから離れたときに取得するイベントを確認します。LogonTouchEvent

私が提案できるもう 1 つのオプションは、ローカル タッチ座標 ( pTouchAreaLocalXpTouchAreaLocalY) を確認することです。指がボタンから離れたときに最後の 1 つを取得する可能TouchEvent性があるため、座標をボタンのサイズと比較します (ボタンは 75x75 であるため、座標のいずれかが < 0 または > 75 の場合、ボタンの外側にあります)。

于 2013-10-26T19:37:32.083 に答える
0
gameHUD = new HUD();

ButtonSprite left = new  ButtonSprite(75, 75, ResourcesManager.getInstance().leftButtonRegion, vbom) {
        @Override
        public boolean onAreaTouched(TouchEvent pTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
            if(pTouchEvent.isActionDown()) {
               this.setCurrentTileIndex(1);
               player.moveX(-3);
            }
            if(pTouchEvent.isActionOutside() || pTouchEvent.isActionUp()) {
                this.setCurrentTileIndex(0);
                player.stopMovingX();
             }
            return super.onAreaTouched(pTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
        }
    };
gameHUD.registerTouchArea(left);
gameHUD.attachChild(left);

camera.setHUD(gameHUD);
于 2013-10-27T15:45:00.773 に答える
0
gameHUD.setTouchAreaBindingOnActionDownEnabled(true); 

この行はうまくいきました。興味を持ってくれてありがとう..

于 2013-10-27T20:12:42.487 に答える