0

嗨,我在我的 Android 应用程序中使用 AndEngine。我想知道是否有一种方法可以检测对象(在本例中为 AnalogOnScreenControls 的对象)何时从被触摸变为未触摸?我想设置一个特定的命令,该命令仅在有人放开“模拟棒”实体时执行。控件还使用浮点值来检测它们所处的位置,因此它也可以作为值从零以外的某个值变为零的方法,因为当控件空闲时变量设置为零。提前感谢您的帮助!

4

2 回答 2

3

您可以检查 TouchEvent 中有一个标志。大多数时候我会做这样的事情:

@Override
public boolean onAreaTouched(final TouchEvent touchEvent, ITouchArea touchArea, float touchAreaLocalX, float touchAreaLocalY) {
    switch(touchEvent.getAction()){
                case TouchEvent.ACTION_MOVE:{
                    // do stuff when finger moves
                    return true; // don't forget to break, or return true directly if the event was handled
                }
                case TouchEvent.ACTION_DOWN:{
                    // do stuff, the first time the finger touches the display
                    return true; 
                }
                case TouchEvent.ACTION_UP:{
                    // do stuff when the finger goes up again and ends the touch event (your case)
                    return true; 
                }
                case TouchEvent.ACTION_CANCEL:{
                    // If the event is somehow canceled - e.g. the finger leaves the display
                    return true; 
                }
                default:{
                    // none of the above
                    return false;
                }
    }
}

类似的东西。如果您需要比这些简单操作更多的事件信息,请获取 MotionEventtouchEvent.getMotionEvent()并查看那里的其他选项。顺便说一句:我更喜欢return true直接使用语句而不是在这里使用 break,只是为了确保在应用程序中不会使用触摸事件。但是你当然可以改变它。

希望这可以帮助

克里斯托夫

于 2012-08-12T18:25:58.177 回答
0

您可以创建一个名为 isTouched 的字段(全局变量)并将其初始设置为 false。然后在 onControlChange() 你这样做:

if(pValueX == 0 && pValueY == 0 && isTouched){ //means knob has recently been touched
 isTouched = false; //set to false so that being idle does not come here
 //do your thing here
}
else{
 isTouched = true;
 //do normal stuff here
}
于 2012-08-12T19:15:29.167 回答