This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Defold 包含用于 2D 物理模拟的 Box2D 和用于 3D 物理模拟的 Bullet。App Manifest 的 Physics 2D 设置可选择 Box2D Version 3、Box2D (Legacy Defold version) 或 None。旧实现是默认选项;Box2D 3 需要主动选择。切换实现可能改变模拟结果,并可能需要重新调整各版本专用的 Box2D 项目设置。
这些手册介绍的面向组件的碰撞对象工作流程和 physics 模块适用于任一 Box2D 实现;选择 None 会移除 2D 物理功能。Defold 还公开较低层的 b2d、b2d.body、b2d.fixture、b2d.shape、b2d.joint、b2d.chain 和 b2d.world API,可直接访问 2D 刚体、形状、关节、链和世界。并非所有低层函数在两种 Box2D 实现中都可用;请根据 App Manifest 中选择的实现查看每个函数生成的 API 文档。
Defold 中使用的物理引擎的主要概念是:
除了碰撞对象本身,您还可以定义碰撞对象 约束,更常称为 关节,以连接两个碰撞对象并限制或以其他方式施加力并影响它们在物理模拟中的行为。了解有关关节的更多信息。
您还可以探测并沿着称为 射线投射 的线性射线读取物理世界。了解有关射线投射的更多信息。
物理引擎模拟牛顿物理,它被设计为与米、千克和秒(MKS)单位一起使用良好。此外,物理引擎被调整为适用于大小在 0.1 到 10 米范围内的移动物体(静态物体可以更大),默认情况下,引擎将 1 单位(像素)视为 1 米。这种像素和米之间的转换在模拟级别上很方便,但从游戏创建的角度来看,它并不是很有用。使用默认设置时,大小为 200 像素的碰撞形状将被视为具有 200 米的大小,这超出了推荐范围,至少对于移动物体来说是如此。
通常,需要缩放物理模拟以使其与游戏中对象的典型大小良好配合。物理模拟的比例可以在 game.project 中通过 物理比例设置 进行更改。将此值设置为例如 0.02 将意味着 200 像素将被视为 4 米。请注意,重力(也在 game.project 中更改)必须增加以适应比例的变化。
建议以固定间隔更新物理引擎以确保稳定的模拟(而不是以可能不规则的帧率相关间隔更新)。您可以通过检查 game.project 文件中物理部分的 使用固定时间步长设置 来对物理使用固定更新。更新频率由 game.project 文件中引擎部分的 固定更新频率设置 控制。当对物理使用固定时间步长时,还建议使用 fixed_update(self, dt) 生命周期函数与游戏中的碰撞对象进行交互,例如在向它们施加力时。