2017-04-04 3 views
0

나는 C + +로 공격 보트 게임을 만들었고 화면 주위에 마우스를 따라 보트에 문제가 있습니다. 나의 계획은 360도 회전을하는 데 약 4 초가 걸리며 보트를 마우스처럼 따라 다니는 것입니다 (느린 회전, 즉 360도 회전하는 데 약 4 초가 걸리는 반면 순간적으로 회전하는 것이 아닙니다).C++에서 보트 애니메이션의 회전

보트가 마우스를 따라 보트가 잘못된 방향으로 회전하고 360도 회전하므로 마우스가 화면 왼쪽에있을 때 버그가 발생합니다 (마우스가 -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; 
관련 문제