2017-04-04 1 views
0

Je crée un jeu de bateau d'attaque en C++ et j'ai un problème avec mon bateau en suivant la souris sur l'écran. Mon plan est de faire en sorte que le bateau suive la souris plus comme un bateau (des rotations lentes, au lieu d'être instantané, tout en prenant environ 4 secondes pour faire 360 ​​tours) et pour la plupart, il fait ce qu'il devrait. Le bug survient lorsque la souris est sur le côté gauche de l'écran (dès que ma souris croise l'axe -x), lorsque le bateau suit la souris, le bateau tourne dans la mauvaise direction et fait un 360, au lieu de suivre la souris.Rotation d'une animation de bateau en C++

C'est le code que j'utilise pour faire tourner mon bateau.

 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; 
     }` 

Répondre

0

vous oubliez de bloquer la différence d'angle. Il devrait être sur l'intervalle <-pi,+pi> [rad] donc toute différence d'angle en dehors de cet intervalle conduira à de tels problèmes. Essayez ceci à la place:

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;