java - 根据角度和速度更新坐标

标签 java android math 2d

我在这里看到了这个谜题的很多答案,但每次我尝试实现这些答案时,它们似乎都不起作用。我想回复一些答案,但无法回复。或许是因为我的‘声望’等级?

无论如何,这对于游戏来说是一个简单的坐标问题。对大多数人来说很简单,但对我来说却不然。 (数学很糟糕......铁杆)

我的屏幕中央有一艘宇宙飞船。它不会随着旋转而移动 (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/

相关文章:

java - 在 RxJava2 中使用背压将 Observable 转换为 Flowable

android - Jetpack-Compose ModalBottomSheetLayout 引发 java.lang.IllegalArgumentException,初始状态为 "Hidden"

微分求解器上的 C++ 段错误

android - 如何在 Android 中实际显示数学公式

java - 如何在使用RentrantLock完成所有三个 map 的初始化之前避免读取,并在更新完成后返回更新的 map 集?

java - 总和小于等于 k ​​的最长子数组

java - 使用 JSONAssert 查找 json diff 失败

Java:填充网格上的矩形

java - 如何避免使用volley下载冗余数据?

C++:向上舍入 long 以适应 64kb