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或之一。ACTION_OUTSIDE我建议你调试TouchEvent你得到的所有s,即Log在方法中添加一个调用行onTouchEvent,看看当手指离开按钮时你得到什么事件。

我可以建议的另一个选择是检查本地触摸坐标 ( pTouchAreaLocalX, pTouchAreaLocalY)。也许TouchEvent当手指离开按钮时你会得到最后一个,所以将坐标与按钮的大小进行比较(由于按钮是 75x75,如果任何一个坐标是 < 0 或 > 75,它就在按钮之外。)

于 2013-10-26T19:37:32.083 回答
0
gameHUD.setTouchAreaBindingOnActionDownEnabled(true); 

这条线有效。感谢您的关注..

于 2013-10-27T20:12:42.487 回答
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 回答