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