Java 根据角度和速度更新坐标

Java 根据角度和速度更新坐标,java,android,math,2d,Java,Android,Math,2d,我在这里看到了很多关于这个谜题的答案,但每次我尝试实现这些答案时,它们似乎都不起作用。我想回答一些问题,但做不到。也许是因为我的“声誉”水平 总之,这是一个简单的游戏坐标问题。对大多数人来说很简单,但对我来说不是。(数学很烂..铁杆) 我在屏幕中央有一艘宇宙飞船。它不会离开旋转(user.fange)。它的速度(user.dVelocity)纯粹用于计算它在世界上的位置 现在我看到船以1的速度移动。这意味着无论它“去”到哪里,它都以那个速度移动(同样,纯粹是为了地图坐标的目的)。还没有减速或加速

我在这里看到了很多关于这个谜题的答案,但每次我尝试实现这些答案时,它们似乎都不起作用。我想回答一些问题,但做不到。也许是因为我的“声誉”水平

总之,这是一个简单的游戏坐标问题。对大多数人来说很简单,但对我来说不是。(数学很烂..铁杆)

我在屏幕中央有一艘宇宙飞船。它不会离开旋转(user.fange)。它的速度(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范围内。我不知道还要检查什么


感谢您的阅读,我也非常感谢您的帮助。

不确定这是否可行,但在将角度转换为弧度时,请先尝试将角度乘以π,然后再除以180

double radians = (Math.PI * user.fAngle) / 180; 
编辑:


我刚刚注意到worldX和worldY的类型为int。您应该将其类型更改为double,因为位移很可能是分数。

您的问题来自以下事实:

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
这将解决问题

“…假设北方是0。如果我以5的角度移动,那么这个世界 变量应该改变很多,但worldX应该改变很多 几乎没有。这不会发生。”

你给出的X和Y运动公式实际上假设北纬90度

在三角学中,0度角沿+X轴,这将对应于地图上的正东方向。此外,在三角学中,增加角度会绕原点逆时针移动。如果你想让你的角度像指南针的方向一样,以北为0度,以东为90度等等,你应该像这样定义弧度:

double radians = (Math.PI / 180) * ( 90.0 - user.fAngle);

如果你能提供引起问题的“特定角度”,那会有帮助的。哦,糟了。我在投内线。啊!好的,这非常有效,谢谢。:)