2013-03-12 108 views
0

我想將身體從其初始位置移動到onTouchEvent x和y。問題在於身體向錯誤的方向移動。有人能告訴我我的錯誤在哪裏嗎?移動身體onSceneTouchEvent

這是我到目前爲止的代碼:

public boolean onPlayerTouchEvent(final Scene pScene, 
        final TouchEvent pSceneTouchEvent) { 

      final float pValueX = pSceneTouchEvent.getX(); 
      final float pValueY = pSceneTouchEvent.getY(); 
      final float rotation = (float) Math.atan2(pValueX, pValueY); 
      final float xComp = (float) Math.sin(rotation); 
      final float yComp = (float) Math.cos(rotation); 

      if (pSceneTouchEvent.isActionDown()) { 
        this.mPlayerBody.setLinearVelocity(new Vector2(xComp, yComp)); 
      } else if (pSceneTouchEvent.isActionMove()) { 

      } else if (pSceneTouchEvent.isActionUp()) { 
        this.mPlayerBody.setLinearVelocity(new Vector2(0, 0)); 
      } 

      return true; 
    } 

回答

2

您的旋轉(角度)的錯誤公式。

請嘗試下面的代碼。 // touchX和敏感的全局變量

public boolean onPlayerTouchEvent(final Scene pScene, 
       final TouchEvent pSceneTouchEvent) { 

    if (pSceneTouchEvent.isActionDown()) { 
     touchX = pSceneTouchEvent.getX(); 
     touchY = pSceneTouchEvent.getY(); 

    } else if (pSceneTouchEvent.isActionMove()) { 
     final float pValueX = pSceneTouchEvent.getX()-touchX ; 
     final float pValueY = pSceneTouchEvent.getY()- touchY; 
     final float rotation = (float) Math.atan2(pValueY, pValueX); 
     final float xComp = (float) Math.cos(rotation); 
     final float yComp = (float) Math.sin(rotation); 
     this.myBall.getBallBody().setLinearVelocity(
       new Vector2(xComp, yComp)); 
    } else if (pSceneTouchEvent.isActionUp()) { 
     myBall.getBallBody().setLinearVelocity(new Vector2(0, 0)); 
    } 

     return true; 
} 
+0

工程就像一個魅力,謝謝 – pindleskin 2013-03-12 14:04:30

+0

試着回答我以下問題所涉及到的角度計算。 http://gamedev.stackexchange.com/questions/50417/angular-displacement-of-object – Siddharth 2013-03-12 16:37:53

+0

嗨Siddharth你的問題已關閉。 我找到了你的問題的解決方案。 – 2013-03-13 05:17:19