我在这里看到了很多关于这个谜语的答案,但每次我尝试实施答案时,它们似乎都不起作用。我想回答一些答案,但不能。也许是因为我的“声誉”水平?
无论如何,这是游戏的简单坐标问题。对大多数人来说很简单,但不适合我。 (吮吸数学......铁杆)
我在屏幕中间有一个太空飞船。它不会离开旋转(user.fAngle)。它确实有速度(user.dVelocity),纯粹用于计算它在世界上的位置。
现在我让船以1的速度移动。这意味着无论它在哪里移动,它都以该速度移动(再次,纯粹用于地图坐标)。不会减速或加速......但最终会。因此,速度最终将成为一个变化的变量。
这就是我现在所拥有的......
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的范围内。我不确定还有什么要检查。
感谢阅读,感谢您的帮助。
答案 0 :(得分:3)
你的问题来自:
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
这将解决问题。
答案 1 :(得分:0)
不确定这是否可行,但尝试将角度乘以PI,然后在将角度转换为弧度时除以180。
double radians = (Math.PI * user.fAngle) / 180;
编辑:
我刚注意到worldX和worldY的类型为int。您应该将其类型更改为double,因为位移很可能是小数。
答案 2 :(得分:0)
“......让我们说北方是0.如果我以5°的角度移动世界 变量应该改变很多,但worldX应该改变一个 小。这种情况没有发生。“
你为X和Y运动提供的公式实际上假设北方是90度。
在三角学中,0度的角度沿着+ X轴,这对应于地图上的正东方。此外,在三角学中,增加角度会使其在原点周围逆时针。如果你想让你的角度像罗盘标题一样,北角为0度,东角为90度,依此类推,你应该像这样定义radians
:
double radians = (Math.PI / 180) * ( 90.0 - user.fAngle);