2012-09-30 101 views
4

假設有從外面進入屏幕的錯誤。要做到這一點,我們需要有4個座標(StartX,StartY,TargetX,TargetY)。如何將錯誤轉到適當的方向?幾個小時我一直在搞這個,而且一直無法弄清楚這個部分。所以這個錯誤進入了屏幕,但它並沒有面向正確的方向。 (這四個座標是隨機數)。在Andengine中旋轉圖像

我指望了線的斜率,因爲我在學校學到:

int deltaY = TargetY - StartY; 
int deltaX = TargetX - StartX; 
float gradient = (float)deltaY/(float)deltaX; 

然後角度旋轉的bug:

float angle = (float) (Math.atan(gradient) * 180/PI); 

那麼這裏就是旋轉並移動修改:

registerEntityModifier(new RotationModifier(0.3f, 0, angle) { 
    @Override 
    protected void onModifierFinished(IEntity pItem) { 
     super.onModifierFinished(pItem); 

     registerEntityModifier(new MoveModifier(0.8f, StartX, TargetX, StartY, TargetY) { 
      @Override 
      protected void onModifierFinished(IEntity pItem) { 
       super.onModifierFinished(pItem); 
      } 
     }); 
    } 
}); 

該解決方案更復雜,因爲在一定的梯度線上該錯誤可能來自兩個方向,所以它可以面對兩個方向。 我知道1/2的斜率意味着26.56度,在AndEngine座標系中,這意味着-26.56或-206.56度,這取決於錯誤來自哪一方。

回答

3

嘗試這樣:

float bugAngle = 180 + (float) Math.toDegrees(Math.atan2((targetY - bugSprite.getRotationCenterY() - startY), (targetX - bugSprite.getRotationCenterX() - startX))); 
bugSprite.setRotation(bugAngle); 

請原諒死亡的長線。

+0

我設法與幾個如果-S做到這一點,但您的解決方案更簡單! – erdomester

0

嘗試用一種更簡單:

float angle = getAngle(StartX, TargetX , StartY, TargetY); 
YourSprite.setRotation((int) angle); 

Brokap:d