C++中船只动画的旋转

Rotation of a boat animation in C++

本文关键字:旋转 动画 C++      更新时间:2023-10-16

我正在用 c++ 创建一个攻击艇游戏,我的船在屏幕上跟随鼠标时遇到了问题。我的计划是让船更像船一样跟随鼠标(缓慢旋转,而不是瞬时,同时需要大约 4 秒才能完成 360 度转弯(,并且在大多数情况下它做了它应该做的事情。

当鼠标在屏幕左侧时(当我的鼠标越过 -x 轴时(,就会发生错误,当船跟随鼠标时,船转向错误的方向并执行 360,而不是跟随鼠标。

这是我用来转船的代码。

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

你忘了夹紧角度差。它应该在间隔<-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;