2014-09-28 65 views
0

我有一個炮塔,可以預測移動目標的位置併發射相交的炮彈。平滑地旋轉炮塔並保持精度

它採用的方法是基於在這篇文章中(2d game : fire at a moving target by predicting intersection of projectile and unit

所檢查的答案,並返回與ATAN2計算出的浮子角度,我還添加TwoPI以除去底片。

如果我線性插值這樣

currentAngle = MathHelper.Lerp(currentAngle, newAngle, speed)' 

炮塔運動這意味着越接近炮塔得到它採取較小的步驟,降低轉速和精度降低了。

如果我用固定的步驟做這樣的事情

if (_angle < newAngle) 
{ 
    _angle += fixedStep; 
} 
if (_angle > newAngle) 
{ 
    _angle -= fixedStep; 
} 

是個較好的結果,但我失去了高精確度,其中角不能得到任何比固定步長的大小接近。

有沒有更好的方法來做這樣的事情?

預期的最終結果是任何事情都可以平穩地移動,當炮塔需要達到正確的角度時,炮塔能夠從最高速度加速或減速,並在突然不得不另外旋轉時增加一些慣性。

希望我可以工作一些最終,但任何提示讚賞。

回答

0

您可以通過查看您是否使用固定步驟「超過」角度移動來獲得此準確度。例如:

if (_angle < newAngle) 
{ 
    _angle += fixedStep; 
    if(_angle > targetAngle) 
    { 
     _angle = targetAngle; 
    } 
} 
if (_angle > newAngle) 
{ 
    _angle -= fixedStep; 
    if(_angle < targetAngle) 
    { 
     _angle = targetAngle; 
    } 
} 

當然,你可能需要修改這個代碼,以佔取決於你如何存儲的角度纏繞角度(比如-1變成359)。