2017-04-04 8 views
0

私はC++で攻撃ボートゲームを作成していますが、画面の周りにマウスを置いてボートに問題があります。私の計画はボートをボートのようにマウスに追従させることです(360回転するのに約4秒かかりますが、瞬間的にではなくゆっくりと回転させてください)。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;