Pymunk 车身专用阻尼

Pymunk body-specific damping

如何使用pymunk.Body.update_velocity(body, gravity, damping, dt) 来阻尼质量。我知道我可以在这里使用全局阻尼,但我想稍后添加更多质量并为每个质量定制阻尼,所以我想学习如何部署特定于车身的阻尼。我有以下问题

  1. 如何使用pymunk.Body.update_velocity
  2. 如果我不想自定义重力,我可以将重力留空吗?或者我应该只写 space.gravity
  3. 这里的 dt 是什么,我如何确定它

您是否在此处的文档中找到示例:http://www.pymunk.org/en/latest/pymunk.html#pymunk.Body.velocity_func

  1. 你需要在某处定义一个自定义速度函数,然后将它设置在你想要的body上。所以最好在创建实体之前定义它。在此函数中,您可以根据需要调用现有的默认速度函数 (pymunk.Body.update_velocity),但这不是必需的。这取决于您是否要自己编写所有代码来更新 body 的速度,或者您是否只想以现有代码为基础对其进行一些修改。因为你只想修改阻尼我认为调用默认函数最简单。

  2. 当您调用默认的 v 函数时,您可以发送与您在自定义函数中获得的重力相同的未经修改的重力。

  3. dt 是 delta t时间。我现在看到这里的文档可以改进,我会做一个记录。所以 dt 与发送到模拟循环中 space.step(dt) 函数的 dt 的值相同。

总而言之,我认为这样就可以了(你只需要将modified_damping的计算调整为你想要的逻辑):

def custom_damping(body, gravity, damping, dt):
    modified_damping = body.custom_damping * damping
    pymunk.Body.update_velocity(body, gravity, modified_damping, dt)

body.custom_damping = 0.31415
body.velocity_func = custom_damping

(如果你不想在 body 上设置变量,你当然可以用其他方式来做。假设你希望所有物体的阻尼都是正常情况下的 2 倍,你可以这样做 modified_damping = 2 * damping 而不是,并删除 body.custom_damping 属性.