2017-04-04 76 views
0

我在C++中創建了一個攻擊船遊戲,並且我的船在屏幕上出現鼠標後出現問題。我的計劃是讓船跟隨着小船更像一條船(緩慢旋轉,而不是瞬間的,同時需要4秒鐘才能完成360轉),而且大部分它都會按照它應該做的。在C++中旋轉的船動畫

當鼠標位於屏幕的左側時(只要我的鼠標穿過-x軸),就會發生該錯誤,因爲船隻遵循鼠標,船隻在錯誤的方向轉動,而不是跟隨鼠標。

這是我用來做我的船轉動的代碼。

 angle = atan2(delta_y, delta_x) * 180.0/PI; 

     //Rotate the boat towards the mouse and 
     //make the boat turn more realistically 
     if (angle - rotate > 0) { 
      rotate += 1.0f; // turns left 
     } else if (angle - rotate < 0) { 
      rotate -= 1.0f; // turns right 
     } 
     if (angle - rotate >= 360.0f) { 
      rotate = 0.0f; 
     }` 

回答

0

你忘了夾角差。它應該在間隔<-pi,+pi> [rad]之間,因此在此間隔以外的任何角度差異都會導致此類問題。試試這個:

angle = atan2(delta_y, delta_x) * 180.0/PI; // target [deg] 
da = angle-rotate; // unclamped delta [deg] 
while (da<-180.0f) da+=360.0f; 
while (da>+180.0f) da-=360.0f; 
    if (da >= +1.0f) rotate += 1.0f; 
else if (da <= -1.0f) rotate -= 1.0f; 
else     rotate = 0.0f;