2012-11-20 527 views
0

我是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; 
     } 
+0

Plz任何人都可以澄清这个疑问。这对所有的机器人都很重要 – sam786

回答

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 = currentAngle - initialAngle)。然后致电setRotation(Math.toDegrees(delta))

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

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

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

+0

感谢您的回复....它的工作....谢谢jong – sam786

+0

你能为它提供代码吗?我不明白如何获得两个指针ID?当我用两根手指触摸并通过pSceneTouchEvent.getMotionEvent.getCount()计数它们时;所以它给出了1.如果我写pSceneTouchEvent.getPointerID());那么它会给第一个指针ID,如何获得第二个? – Tahreem

+0

我查看了'MultiTouchController.java'的代码,并且AndEngine为'MotionEvent'中的每个指针触发了一个'TouchEvent',所以您应该获得2个触摸事件方法的调用。 – Jong