使用多点触控旋转对象

时间:2012-11-20 14:35:27

标签: android sprite andengine

我是andengine甚至是Android游戏开发的新手。我已经创建了精灵作为一个盒子。现在可以使用此编码来拖动此框。它工作正常。

但我想要多点触控,我想在那个盒子里用2个手指旋转一个精灵,甚至它应该是可拖动的。 .... PLZ帮助某人...

我正在尝试这么多天,但不知道。

   final float centerX = (CAMERA_WIDTH - this.mBox.getWidth()) / 2;

   final float centerY = (CAMERA_HEIGHT - this.mBox.getHeight()) / 2;
     Box= new Sprite(centerX, centerY, this.mBox,
            this.getVertexBufferObjectManager()) {

     public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
                float pTouchAreaLocalX, float pTouchAreaLocalY) {
           this.setPosition(pSceneTouchEvent.getX() - this.getWidth()/ 2,
                           pSceneTouchEvent.getY() - this.getHeight() / 2);

             float pValueX = pSceneTouchEvent.getX();
            float pValueY = CAMERA_HEIGHT-pSceneTouchEvent.getY();

            float  dx = pValueX -  gun.getX();
            float  dy = pValueY -  gun.getY();

             double  Radius = Math.atan2(dy,dx);
             double Angle = Radius * 360 ;

                Box.setRotation((float)Math.toDegrees(Angle));
                 return true;
        }

1 个答案:

答案 0 :(得分:1)

确保您在游戏中启用了多点触控功能。您可以使用onLoadEngine方法中MultiTouchExample中使用的相同代码。

该算法非常简单,类似于您在此处发布的内容。

  1. 跟踪onAreaTouched方法中最多2个指针ID。 (您可以通过调用pSceneTouchEvent.getPointerID()获取指针ID。)
  2. 跟踪指针的状态(当前正在触摸/未触摸)和位置(pTouchAreaLocalXpTouchAreaLocalY)。
  3. 每当有两个指针触摸时(两者都收到ACTION_DOWN),保存初始角度。 (Math.tan2(pointer1Y - pointer2Y, pointer1X - pointer2X))。
  4. 只要没有为指针调用ACTION_UP,就在指针的每个ACTION_MOVE事件中更新新角度,并获得角度delta(delta = currentAngle - initialAngle)。然后拨打setRotation(Math.toDegrees(delta))
  5. 要使用2个指针拖动精灵,你需要移动你的精灵,每个指针移动的距离越小。例如,如果:

    pointer1.dX = 50;
    pointer1.dY = -20;
    pointer2.dX = 40;
    pointer2.dY = -10;
    

    精灵应该在X轴上移动+40个单位,在Y轴上移动-10个单位。