C++ 中船动画的旋转
Rotation of a boat animation in C++
我正在用 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;
我正在用 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;