我正在用Andengine开发一款游戏。我在游戏控制器按钮上使用了HUD。但我有一个错误。错误是:当我按下按钮并在没有isActionUp的情况下将手指移到buttun外面时,按钮永远被压迫。我怎么解决这个问题? 我尝试过.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);
答案 0 :(得分:0)
您应该至少获得ACTION_UP
或ACTION_OUTSIDE
中的一个,具体取决于用户的操作。我建议你调试你得到的所有TouchEvent
,即在Log
方法中添加onTouchEvent
调用行,看看当手指离开按钮时会得到什么事件。 / p>
我建议的另一个选项是检查本地触摸坐标(pTouchAreaLocalX
,pTouchAreaLocalY
)。当手指离开按钮时,你可能会得到最后一个TouchEvent
,所以将坐标与按钮的大小进行比较(因为按钮是75x75,如果其中一个坐标是< 0或> 75,那么它是在按钮外面。)
答案 1 :(得分: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);
答案 2 :(得分:0)
gameHUD.setTouchAreaBindingOnActionDownEnabled(true);
这条线很有效。感谢您的关注..