Android TouchEvent ACTION_DOWN和ACTION_MOVE具有相同位置的前x个步骤

时间:2015-04-30 10:42:44

标签: android position box2d andengine ontouchlistener

使用Android(Andengine)的touchEvents时遇到问题。 我通过构建一个Body来注意到这个问题,我可以通过触摸它并移动手指来旋转它。

多数人都在工作。我触摸了Object,pScenTouchEvent在ACTION_DOWN上给了我一个位置(x,y)。然后我移动手指并调用ACTION_MOVE方法(在我的开关中)。问题是,前1-6次,ACTION_MOVE块的位置具有与ACTION_DOWN相同的坐标(x,y)。 所以我得到的下一个位置与旧位置有很大距离。 影响:身体第一次做了一次大的“旋转跳跃”。

@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

那么问题是什么?在我的游戏中,身体必须正确旋转。有人想要解决它吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

似乎问题是我的硬件。我在另一部智能手机上测试了相同的代码,但它确实有效。