Android 是安卓';运动事件处理是否准确?
臭虫 我的钢琴应用程序中有一个奇怪的错误。有时钥匙(以及音符)会挂起。我做了大量的调试,并将其缩小到像机器人一样的运动事件处理不准确:Android 是安卓';运动事件处理是否准确?,android,touch,motion-detection,Android,Touch,Motion Detection,臭虫 我的钢琴应用程序中有一个奇怪的错误。有时钥匙(以及音符)会挂起。我做了大量的调试,并将其缩小到像机器人一样的运动事件处理不准确: 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/(209
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\u UP
作为另一个音符。我不应该先采取行动吗
如日志末尾所示,这肯定不是区域检测中的错误,因为ACTION\u UP
事件显然位于B4区域
日志记录实现详细信息
每个onTouchEvent()
调用都会被记录,因此日志是准确的
操作移动日志记录的相关伪代码为:
Key oldKey = Key.get(event.getHistoricalX(), event.getHistoricalY());
Key newKey = Key.get(event.getX(), event.getY());
问题:
这是Android的正常行为(坐标跳跃)
一个
ACTION\u UP
是否可以在没有任何之前的ACTION\u移动
到它的坐标的情况下发生?当我试图在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) ...
List touchEvents=game.getInput().getTouchEvents();
int len=touchEvents.size();
对于(int i=0;i
其中:“game.getInput().getTouchEvents()”仅指TouchEvent对象及其方法,如getTouchEvent
这对我来说是个好办法,我希望这能有所帮助,祝你好运!这是什么设备,你在跟踪多个手指吗?这些日志输出的细分情况是什么?EventX在这两行中都是292,如果我读对了,不应该同时放“挂起的便笺”和“按键的便笺”吗B4范围内的坐标?我一点也没有,但也很好奇。它在模拟器和/或其他设备中正常工作吗?@adamp。回过头看,确实日志输出看起来有点可疑,因为它显示了相同的坐标和不同的注释。然而,我继续记录当前按下的带有指针id的键当指针被提起时,松开并释放正确的指针。