Android - AndEngine“不再感动”的方法?

时间:2012-08-11 01:08:30

标签: java android methods andengine

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

2 个答案:

答案 0 :(得分: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;
                }
    }
}

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

希望这会有所帮助

Christoph

答案 1 :(得分: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
}