使用旋转的奇怪运动
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.cos
和 Math.sin
。但是,由于 Math.cos
和 Math.sin
使用弧度,您应该根据 rotation
变量的单位使用 rotation - Math.PI/2
或 Math.toRadians(rotation - 90)
。
注意 Math.asin
、Math.acos
、Math.atan
和 Math.atan2
都是 return 弧度。
我正在 Java 编写游戏程序,我遇到了一个非常非常新手的问题,但我终究无法弄明白。我想要做的就是将对象的旋转设置为朝向鼠标(效果很好),然后它在旋转的方向(朝向鼠标)接收到初始推力。
旋转似乎工作正常,但问题是运动很奇怪而且不正常。我认为 GIF 最能说明问题:
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.cos
和 Math.sin
。但是,由于 Math.cos
和 Math.sin
使用弧度,您应该根据 rotation
变量的单位使用 rotation - Math.PI/2
或 Math.toRadians(rotation - 90)
。
注意 Math.asin
、Math.acos
、Math.atan
和 Math.atan2
都是 return 弧度。