用C ++旋转船形动画

时间:2017-04-04 05:50:28

标签: c++ animation rotation 2d glut

我正在用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;
        }` 

1 个答案:

答案 0 :(得分: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;