java - GTA2 像 Car Physics,但极其简化

标签 java android box2d physics andengine

好吧,这个问题困扰了我很长时间。任何人都可以向我展示或指出可以控制像 GTA2 那样的汽车的算法吗?经过 3 天的研究,我所能想到的就是所有这些算法,这些算法用于在轮子和单独的轮子上使用枢轴和关节等。只有这样才能实现像 GTA2 那样简单的汽车运动吗?

我希望能够在没有轮子的矩形上使用该算法,但仍然能够让汽车漂移。那可能吗?顺便说一句,我正在为 2D 游戏使用 Box2D。

我知道这更适合 gamedev 但出于某种原因我不能发布问题。

最佳答案

一个简单的答案可以变成相当大的东西,所以我将尝试通过以复杂程度递增的顺序呈现不同的要点来进行解释。我将假定您具备物理学的基本知识。

  1. 假设一个固定的转弯半径(如果您使用的是键盘还不错,如果您有模拟 Controller 则非常烦人)。没有什么比尝试不同的位置来找出感觉合适的半径更好的了。

  2. 假设您的轮子最初是朝前的,当您按下转动键时,它们会逐渐转动到最大可能。这基本上意味着将半径从无穷大减小到尽可能小的半径(您可以很容易地找出轮子的角度与半径之间的关系)。如果您有模拟 Controller ,则半径应由模拟输入的连续值控制。

  3. 让部队进入!当你在车里转弯时,你只是因为向心加速度而转弯。该向心加速度是由一种力引起的,该力实际上是汽车与道路的摩擦力。您可以将摩擦力视为常数,将车辆的质量视为常数而不会出现重大问题,然后您就可以在汽车的速度与临界半径(给定速度的情况下可以转弯的最小半径)之间建立关系。向心加速度是 a=v^2/r = Friction/mass 所以临界半径 r = v^2*mass/Friction。您可以考虑,无论您转动多少,车辆都会漂移,并且最多可以描述这条曲线。这应该给你一个很好的模拟,但仍然不是“失去控制”的感觉。为此,请参见下一点! circular motion

  4. 理论与前一点完全相同,但主要是现实中的摩擦力不是恒定的。事实上,静摩擦总是比动摩擦大。在实践中,你应该有一个静摩擦和一个(较小的)动摩擦。您根据静摩擦计算 r,当您的速度太大而无法达到该 r(这是您会漂移的时候)时,您开始使用动摩擦计算新的 r。这会给您带来失控的感觉,但车辆仍不会旋转。 Friction

  5. 为了看到旋转,您必须考虑施加在每个车轮上的力(事实上,不同的车轮受到使汽车旋转的不同力)并考虑一些更高级的物理学,例如因为哪个轮子是驱动轮,并且还考虑动摩擦力不是常数。但是我认为这超出了您的范围。

  6. 或者,您可以做一些 GTA2 似乎可以做的事情。当您知道自己将要漂移或漂移太多(您在此处设置阈值)时,只需以编程方式让车辆失去控制并旋转。

希望这对您有所帮助,如果您有任何具体疑问,请尽管提出。

关于java - GTA2 像 Car Physics,但极其简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9525367/

相关文章:

Java 到 PHP 的转换

java - 如何显示视频广告 (AdColony)

java - body 在不施加任何力的情况下移动? (方框2d)

libgdx - Box2d 传感器 - 每个步骤中的接触回调

java - 正则表达式匹配数字后跟空格

java - 如何在java中从控制台隐藏不必要的Selenium调试消息

Android 9 上的 android.database.sqlite.SQLiteCantOpenDatabaseException

android - 在android中生成核心转储

javascript - 在 box2d/matter.js 中查找运动的法向和切向分量

java - Intellij 构建时间太长。 Gradle 没有帮助