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