为什么物理引擎会产生不同的结果?

引擎中没有随机数字,一切都以相同的方式计算。 每次都有什么不同?

这是我自己小的物理引擎,我之前做的是用lua编写的,运行在Moai SDK中

每次使用相同的时间步骤。 我的物理引擎设置为使用33毫秒的时间步长,我可以产生完全相同的模拟(假设我使用相同的机器)。如果我使用不同的时间步长,甚至超过1毫秒,游戏将慢慢发散。

你可以用这个基本的循环来做到这一点:

void update( long timeMS ) { _accumulatedTime += timeMS; while ( _accumulatedTime >= _timeStepMS ) { // do physics simulation _accumulatedTime -= _timeStepMS; } } 

这将确保您始终以精确的时间步长运行物理模拟,并确保您永不失去任何时间。

在这里阅读一个很好的解释timetep http://gafferongames.com/game-physics/fix-your-timestep/ Timestep应该是固定的,这篇文章采取了一个很好的方法,并清楚地解释一切。

没有关于发动机本身的更多细节,这很难回答。 然而,我的直觉是在代码中寻找竞争条件 。

这些有用的细节包括:

  • 你的引擎是多进程的还是multithreading的?
  • 你的引擎是事件驱动的吗?
  • 你如何保证你的testing是一致的?