pymunk 和 pyglet/pygame 每次更新多少步?

How many steps per update in pymunk and pyglet/pygame?

我了解到,每次屏幕更新将 pymunk space 推进几个步骤可以导致更流畅的模拟,并有助于防止对象相互隧道,例如。该示例表明:

def update(dt):
    for _ in range(10):
        space.step(dt/10)

为了帮助我了解步进功能的工作原理,每次屏幕更新将 space 推进更多步数会产生什么影响。例如,这样做的缺点是什么:

def update(dt):
    for _ in range(10_000):
        space.step(dt/10_000)

最大的缺点是性能。在给定的时间段内调用步骤 10000 次比调用 1 次要昂贵得多。

我想迟早会有其他影响,例如当dt变得很小时围绕浮点精度。例如,如果一个物体的速度非常低,它会移动一小段距离,如果该数字非常小,则可能无法将其准确存储为浮点数(在 pymunk 的情况下为 64 位双精度数),因此错误累积,最终结果是比仅调用一次步骤更糟糕的模拟。