嗨,大家好,
在我用 AndEngine 开发的游戏中,有很多精灵在跑来跑去。现在每个精灵都有一个TouchArea
注册到场景中,因为当它被触摸时我会显示一些关于精灵的信息。场景本身有一个OnSceneTouchListener
我用来移动相机和缩放的。
我的问题是,每次用户移动相机(通过触摸显示屏某处并移动手指)时OnAreaTouched()
,任何精灵的方法,即意外在手指下方,都会在移动完成时被调用(手指被抬起) . 我已经将触发事件限制为event.getAction()==UP
(在它被称为 touchAreas 的真正混乱之前),但这还不够。如果用户正在缩放或移动相机,则不应激活精灵 touchAreas。
有什么方法可以区分OnAreaTouched
-event 和OnSceneTouched
-event 吗?首先调用哪个,我可以压制另一个吗?
这是我的OnSceneTouched()
方法(简化):
public boolean onSceneTouchEvent(Scene scene, final TouchEvent event) {
boolean isZooming = event.getMotionEvent().getPointerCount() >= 2;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// REMEMBER FIRST TOUCHPOINT, TO KNOW IN WHICH DIRECTION TO MOVE
this.touchPoint = new Point(event.getMotionEvent().getX(), event.getMotionEvent().getY());
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (isZooming) {
// DO SOME ZOOM STUFF
} else {
// DO SOME MOVEMENT STUFF
}
return true;
}
好的,实际上这不是很有趣 - 但正如你所看到 true
的,我总是返回信号表示触摸事件已被处理。仍然OnAreaTouched()
被调用
这是一个典型OnAreaTouched()
的精灵方法:
public boolean onAreaTouched(final TouchEvent touchEvent, float touchAreaLocalX, float touchAreaLocalY) {
if (touchEvent.getAction() == TouchEvent.ACTION_UP) {
// DISPLAY INFORMATION ABOUT THE SPRITE
return true;
}
return false;
}
你看,它并没有什么特别之处。所以我希望有人可以在这里帮助我找到一个解决方案,如何在应该使用OnAreaTouch
-event 时抑制 -event 。OnSceneTouch
也许我能以某种方式捕捉event.getAction()==UP
到OnSceneTouched()
-Method??
我希望我能很好地解释这个问题,让你理解(对不起,这对我来说并不容易:)。非常感谢您的帮助,感谢您的宝贵时间!
问候
克里斯托夫
编辑:
在尝试了 MahdeTo 以某种方式标记事件的建议后,我发现了以下内容:
TouchEvent
触发方法的OnSceneTouchEvent()
与触发OnAreaTouched()
方法的不同。OnAreaTouched()
20 毫秒后被调用OnSceneTouchEvent()
OnAreaTouched()
当用户将手指放在显示器上时,事件调用实际上开始(然后他移动它并OnSceneTouchEvent()
多次调用),然后当他抬起手指时,第一个事件停止并得到处理。(我通过测量时间来试一试)
所以我想出了一个解决方案来测量一个触摸事件持续了多长时间。如果事件超过 200 毫秒,我猜用户不想简单地单击,而是移动或缩放(因为这些操作通常需要更长的时间)。因此,现在该OnAreaTouched()
方法仅在有人真正想要单击而不是意外滑过该区域时才被调用。
但这仍然不是一个好的解决方案,如果有人知道更多关于控制此类事件的信息,我将不胜感激。
谢谢你