使用旋转的奇怪运动

Strange Movement Using Rotation

我正在 Java 编写游戏程序,我遇到了一个非常非常新手的问题,但我终究无法弄明白。我想要做的就是将对象的旋转设置为朝向鼠标(效果很好),然后它在旋转的方向(朝向鼠标)接收到初始推力。 旋转似乎工作正常,但问题是运动很奇怪而且不正常。我认为 GIF 最能说明问题: 是的,我不确定发生了什么。如您所见,旋转设置得非常完美,但是当对象移动时,就会发生不好的事情。所以我会给出我认为相关的移动代码片段。此代码每刻更新一次(1/60 秒)

dSpeed *= defaultFriction;
speed.x += (float)(dSpeed * Math.cos(rotation - 90));
speed.y += (float)(dSpeed * Math.sin(rotation - 90));

speed.x *= defaultFriction;
speed.y *= defaultFriction;

speed.x = Calculation.clamp(speed.x, -maxSpeed.x, maxSpeed.x);
speed.y = Calculation.clamp(speed.y, -maxSpeed.y, maxSpeed.y);

goalPos.x = pos.x + speed.x;
goalPos.y = pos.y + speed.y;

然后我基本上做一个 while 循环使用 goalPos 一次移动一个像素的对象(轻松处理碰撞) 如果有人可以帮助我,我将非常感激,因为我真的被困住了。谢谢!

您的问题似乎是您将 rotation - 90 传递给 Math.cosMath.sin。但是,由于 Math.cosMath.sin 使用弧度,您应该根据 rotation 变量的单位使用 rotation - Math.PI/2Math.toRadians(rotation - 90)

注意 Math.asinMath.acosMath.atanMath.atan2 都是 return 弧度。