2014-09-05 90 views
2

我試圖通過在360°(右邊或左邊取決於點更靠近哪邊)上儘可能小的路線來旋轉一個精靈,讓我們說它是一支槍,並且我是有幾個問題。如何將一個精靈旋轉到一個點?

在一個圓上,它從359°跳到0°,所以我不能直接使用我的目標角度 - 當前角度。

請記住,我正在使用SFML,因此它在isRotating爲true時正在執行每個函數的功能。

這是一種提供給我的資料:

//The angle in degrees of my sprite 
float currentAngle = pSprite.getRotation(); 
//The angle is needs to be once the rotation is over 
float targetAngle = float(atan2(deltaY,deltaX) * 180/(atan(1)*4) + 180); 

我使用的速度變量來遞增或遞減每幀的角度的值。

distance = Speed*Time.asSeconds(); 
currentAngle += distance; 

回答

1

首先,得到的差:

diff = target - current 

diff是無論是在其他方向上的「短」角(導致更短的旋轉的),或「長」角度(旋轉這是更長的)。注意:

  • 你從來不需要旋轉超過(作爲絕對值)180度從一個角度到另一個角度。

  • 「短」 的角度和 「長」 角具有相反的符號(+/-)和它們的絕對值添加到360

實施例:0 - 359 = -359。這是「長」的角度。我們知道這一點,因爲它的絕對值大於180.「短」的角度會有相反的符號,其絕對值將與359合計爲360,所以它是1.

一個簡單的計算方法是:

while (diff < -180) 
    diff += 360; 
while (diff > 180) 
    diff -= 360; 

diff現在是您正在尋找的角度。所以如果它是負值,請將速度乘以-1。

while(相對於if)是存在的情況下,該角度不是在[0, 360] - 例如,你有current = 1440, target = 359