0

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

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

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

   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;
        }
4

1 回答 1

1

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

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

  1. 跟踪您在onAreaTouched方法中获得的最多 2 个指针 ID。(您可以通过调用获取指针ID pSceneTouchEvent.getPointerID())。
  2. 跟踪指针的状态(当前触摸/未触摸)和位置(pTouchAreaLocalXpTouchAreaLocalY)。
  3. 每当 2 个指针接触时(您都收到ACTION_DOWN了),保存初始角度。( Math.tan2(pointer1Y - pointer2Y, pointer1X - pointer2X))。
  4. 只要ACTION_UP不为指针调用,就在指针的每个ACTION_MOVE事件中更新新的角度,并获得角度增量 ( delta = currentAngle - initialAngle)。然后调用setRotation(Math.toDegrees(delta))

要使精灵可以用 2 个指针拖动,您需要将精灵移动到每个指针移动的距离中的较小者。例如,如果:

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

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

于 2012-11-22T13:41:18.893 回答