2014-09-05 38 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

相关问题