我目前正在使用Java创建一款2D太空游戏,你可以控制飞船在太空中移动。该游戏不使用任何外部库。
飞船应该朝着光标移动。然而,当移动光标时,旧的力量并没有神奇地消失;随着时间的推移,飞船会改变方向,最终朝着期望的方向移动。
然而,我遇到了有关飞船移动的问题。
基本上,我想要实现的粗略示意图如下:
该图显示了飞船在一个游戏刻度内应该如何移动。
圆圈表示飞船的最大速度。
目标角度是当前光标所在的位置。
当前角度是飞船当前行进的方向。
当前角度应该越来越接近目标角度,直到这两个角度相同为止。
飞船应该向最短路线转向目标角度;它可以向左和向右转弯,而不仅仅是向左或向右。
现在我已经解释了我想要实现的内容,接下来我将描述我到目前为止已经实现了什么以及它是如何工作的。
基本上,“飞船”是一张图片,位于屏幕中心。当你“移动”飞船时,飞船保持不动;移动的是游戏区域的其余部分。
相对于表示游戏区域的坐标系,飞船的当前“位置”是整数xPos和yPos。
以下是一些示例代码,展示了系统的工作方式:
int xPos;
int yPos;
public void updateMovement() {
xPos += xSpeed;
yPos += ySpeed;
}
public void moveForward() {
double yTempSpeed = ySpeed;
double xTempSpeed = xSpeed;
yTempSpeed += 0.01 * Math.sin(Math.toRadians(targetAngle));
xTempSpeed += 0.01 * Math.cos(Math.toRadians(targetAngle));
double resultVector = Math.sqrt(xTempSpeed * xTempSpeed + yTempSpeed * yTempSpeed);
if (resultVector < 2) {
ySpeed += 0.01 * Math.sin(Math.toRadians(targetAngle));
xSpeed += 0.01 * Math.cos(Math.toRadians(targetAngle));
}
这段代码成功地将船的最大速度设置为所需值,然而,在结果“矢量”大于2时(即速度已经达到最大值且目标角度与船当前行驶角度非常接近(+- Pi / 2)),该代码无法正常工作(船只的航向不会改变)。
基于此实现,我应该如何改变当前角度呢?
resultVector < 2
条件,除了最大速度之外,一切都按预期工作,对吗? - libik