Android 触摸事件 ACTION_DOWN 和 ACTION_MOVE 在前 x 步中具有相同的位置
Android TouchEvent ACTION_DOWN and ACTION_MOVE havesame position the first x Steps
我在使用 Android (Andengine) 的 touchEvents 时遇到问题。
我通过构建一个 Body 注意到了这个问题,我可以通过触摸它并移动手指来旋转它。
一切正常。我触摸 Object,pScenTouchEvent 在 ACTION_DOWN 上给我一个位置 (x,y)。然后我移动手指并调用 ACTION_MOVE 方法(在我的开关中)。问题是,前 1-6 次,ACTION_MOVE 块的位置与 ACTION_DOWN 具有相同的坐标 (x,y)。
所以我得到的下一个位置与旧位置有很大的距离。
作用:Body第一次做大"rotation jump"
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
switch (pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
Log.d("Position", "down: "+pSceneTouchEvent.getX()+", "+pSceneTouchEvent.getY());
if (playerIsMoving && touchedFigure == null) {
System.out.println("reset");
resetLevel();
}
touchedFigure = null;
break;
case TouchEvent.ACTION_MOVE:
Log.d("Position", "move: "+pSceneTouchEvent.getX()+", "+pSceneTouchEvent.getY());
if (!playerIsMoving && touchedFigure != null && touchedFigure instanceof RotatingFigure) {
((RotatingFigure) touchedFigure).rotate(touchPositionOld, figureCenterOld, new Vector2(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()));
} else if (!playerIsMoving && touchedFigure != null && touchedFigure instanceof SlidingFigure) {
Vector2 newPosition = figureCenterOld;
newPosition.add(new Vector2(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()).sub(touchPositionOld));
((SlidingFigure) touchedFigure).slide(newPosition);
touchPositionOld = new Vector2(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
}
break;
default:
break;
}
return false;
}
这是 LogCat 输出:
04-30 12:18:03.476: D/Position(22974): down: 197.5, 287.91666
04-30 12:18:03.546: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:03.746: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:04.136: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:04.526: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:04.696: D/Position(22974): move: 205.92313, 290.86475
04-30 12:18:04.776: D/Position(22974): move: 206.29709, 290.83334
04-30 12:18:04.846: D/Position(22974): move: 206.68404, 290.83334
04-30 12:18:04.926: D/Position(22974): move: 207.1292, 291.29587
04-30 12:18:05.016: D/Position(22974): move: 207.51622, 291.25
04-30 12:18:05.056: D/Position(22974): move: 207.92809, 291.25
04-30 12:18:05.136: D/Position(22974): move: 208.3959, 291.25
04-30 12:18:05.186: D/Position(22974): move: 208.75002, 291.3545
04-30 12:18:05.216: D/Position(22974): move: 208.75002, 291.85513
04-30 12:18:05.316: D/Position(22974): move: 206.34752, 291.66666
那么问题是什么?在我的游戏中 body 必须正确旋转。有一些body 修复它的想法吗?
谢谢!
看来问题出在我的硬件上。我在另一部智能手机上测试了相同的代码并且它有效。
我在使用 Android (Andengine) 的 touchEvents 时遇到问题。 我通过构建一个 Body 注意到了这个问题,我可以通过触摸它并移动手指来旋转它。
一切正常。我触摸 Object,pScenTouchEvent 在 ACTION_DOWN 上给我一个位置 (x,y)。然后我移动手指并调用 ACTION_MOVE 方法(在我的开关中)。问题是,前 1-6 次,ACTION_MOVE 块的位置与 ACTION_DOWN 具有相同的坐标 (x,y)。 所以我得到的下一个位置与旧位置有很大的距离。 作用:Body第一次做大"rotation jump"
@Override
public boolean onSceneTouchEvent(Scene pScene, TouchEvent pSceneTouchEvent) {
switch (pSceneTouchEvent.getAction()) {
case TouchEvent.ACTION_DOWN:
Log.d("Position", "down: "+pSceneTouchEvent.getX()+", "+pSceneTouchEvent.getY());
if (playerIsMoving && touchedFigure == null) {
System.out.println("reset");
resetLevel();
}
touchedFigure = null;
break;
case TouchEvent.ACTION_MOVE:
Log.d("Position", "move: "+pSceneTouchEvent.getX()+", "+pSceneTouchEvent.getY());
if (!playerIsMoving && touchedFigure != null && touchedFigure instanceof RotatingFigure) {
((RotatingFigure) touchedFigure).rotate(touchPositionOld, figureCenterOld, new Vector2(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()));
} else if (!playerIsMoving && touchedFigure != null && touchedFigure instanceof SlidingFigure) {
Vector2 newPosition = figureCenterOld;
newPosition.add(new Vector2(pSceneTouchEvent.getX(), pSceneTouchEvent.getY()).sub(touchPositionOld));
((SlidingFigure) touchedFigure).slide(newPosition);
touchPositionOld = new Vector2(pSceneTouchEvent.getX(), pSceneTouchEvent.getY());
}
break;
default:
break;
}
return false;
}
这是 LogCat 输出:
04-30 12:18:03.476: D/Position(22974): down: 197.5, 287.91666
04-30 12:18:03.546: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:03.746: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:04.136: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:04.526: D/Position(22974): move: 197.5, 287.91666
04-30 12:18:04.696: D/Position(22974): move: 205.92313, 290.86475
04-30 12:18:04.776: D/Position(22974): move: 206.29709, 290.83334
04-30 12:18:04.846: D/Position(22974): move: 206.68404, 290.83334
04-30 12:18:04.926: D/Position(22974): move: 207.1292, 291.29587
04-30 12:18:05.016: D/Position(22974): move: 207.51622, 291.25
04-30 12:18:05.056: D/Position(22974): move: 207.92809, 291.25
04-30 12:18:05.136: D/Position(22974): move: 208.3959, 291.25
04-30 12:18:05.186: D/Position(22974): move: 208.75002, 291.3545
04-30 12:18:05.216: D/Position(22974): move: 208.75002, 291.85513
04-30 12:18:05.316: D/Position(22974): move: 206.34752, 291.66666
那么问题是什么?在我的游戏中 body 必须正确旋转。有一些body 修复它的想法吗?
谢谢!
看来问题出在我的硬件上。我在另一部智能手机上测试了相同的代码并且它有效。