我正在用 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 - Math.PI/2
或 Math .toRadians(rotation - 90)
取决于您的 rotation
变量的单位。
请注意,Math.asin
、Math.acos
、Math.atan
和 Math.atan2
都是返回弧度。
关于java - 使用旋转的奇怪运动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28081687/