我用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一次移动一个像素(轻松处理碰撞) 如果有人可以帮助我,我真的很感激,因为我真的被困住了。谢谢!
答案 0 :(得分:1)
您的问题似乎是您将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
都返回弧度。