我在这里看到了这个谜题的很多答案,但每次我尝试实现这些答案时,它们似乎都不起作用。我想回复一些答案,但无法回复。或许是因为我的‘声望’等级?
无论如何,这对于游戏来说是一个简单的坐标问题。对大多数人来说很简单,但对我来说却不然。 (数学很糟糕......铁杆)
我的屏幕中央有一艘宇宙飞船。它不会随着旋转而移动 (user.fAngle)。它确实有速度(user.dVelocity),纯粹用于计算其在世界中的位置。
现在我的船以 1 的速度移动。这意味着无论它“去”到哪里,它都以该速度移动(同样,纯粹出于 map 坐标的目的)。目前还没有减速或加速......但最终会。因此速度最终将成为一个变化的变量。
这是我现在拥有的..
double radians = (Math.PI / 180) * ( user.fAngle);
worldX = (int)(worldX + user.dVelocity * Math.cos(radians));
worldY = (int)(worldY + user.dVelocity * Math.sin(radians));
user.fangle 当然 = 0-359
当你开始游戏时,worldX 和 worldY 从 0 开始。我正在尝试根据船舶的角度和硬编码速度修改 worldX 和 worldY 的每一帧。
在大多数情况下,这是有效的。但奇怪的是,在某些时候,坐标会卡住。或者他们会停在 0 而不会进入负数。同样,这只会在特定时间和特定角度发生。
我看到的另一个问题是,当数字确实发生变化时,它们总是以一致的速度变化。换句话说,假设北为 0。如果我以 5 角移动,则 worldY 变量应该变化很大,但 worldX 应该变化一点。这并没有发生。
在我的调试中,我已经确保 user.fAngle 确实在 0-359 的范围内。我不确定还需要检查什么。
感谢您的阅读,并感谢您的帮助。
最佳答案
您的问题来自以下事实:
int x = 0;
x = x + 0.5; // rounding down : x == 0
x = x + 0.5; // rounding down : x == 0
您需要一个浮点变量来记住位置。
float x = 0;
x = x + 0.5; // x == 0.5
worldX = (int)x; // worldX == 0
x = x + 0.5; // x == 1
worldX = (int)x; // worldX == 1
这样就可以解决问题了。
关于java - 根据角度和速度更新坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7217478/