错误
我的钢琴应用程序中有一个奇怪的错误。有时键(以及音符)会挂起。我做了很多调试,并将其缩小到看起来像运动事件处理的机器人不准确的地方:
DEBUG/(2091): ACTION_DOWN A4
DEBUG/(2091): KeyDown: A4
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_UP B4 //HOW CAN THIS BE????
DEBUG/(2091): KeyUp: B4
DEBUG/(2091): Stream is null, can't stop
DEBUG/(2091): Hanging Note: A4 X=240-287 EventX=292 Y=117-200 EventY=164
DEBUG/(2091): KeyUp Note: B4 X=288-335 EventX=292 Y=117-200 EventY=164
显然,在这里我可以看到突然间我突然有ACTION_UP
的另一个音符。我不应该首先得到ACTION_MOVE
吗?
如日志末尾所示,区域检测中肯定不是错误,因为ACTION_UP
事件明显位于B4区域。
记录实施细节
记录每次onTouchEvent()
次呼叫,因此日志准确无误。
ACTION_MOVE记录的相关伪代码是:
Key oldKey = Key.get(event.getHistoricalX(), event.getHistoricalY());
Key newKey = Key.get(event.getX(), event.getY());
问题
这是Android的正常行为(跳跃坐标)吗?
ACTION_UP
可以在没有任何先前的ACTION_MOVE
朝向它的坐标的情况下发生吗?
答案 0 :(得分:0)
当我尝试在Android上开发简单的射击游戏时,我遇到了类似的问题。如果问题是由硬件引起的,我用来解决这个问题的技巧可能不起作用,但无论如何都值得一试。
一般的想法是拥有一个“TouchEvents”数组,并在循环中随时间迭代遍历此数组。这样,当设备注册多个和/或同时触摸事件时,它们在阵列中线性存储,但不在现场处理。你确保一个接一个地处理它们,删除任何不同步的事件。
List<TouchEvent> touchEvents = game.getInput().getTouchEvents();
int len = touchEvents.size();
for(int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i);
if(event.type == TouchEvent.TOUCH_DRAGGED || event.type == TouchEvent.TOUCH_DOWN) ...
其中:“game.getInput()。getTouchEvents()”只是指一个TouchEvent对象及其方法,如getTouchEvent
这对我有用,我希望这会有所帮助,祝你好运!