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 物理关节。关节使用某种约束连接两个碰撞对象。支持的关节类型有:
bodyB
上的一个点限制到 bodyA
上的一条线上。轮子关节还提供悬架弹簧。在 Box2D 中被称为轮子关节。目前只能通过编程方式使用 physics.create_joint()
创建关节:
编辑器支持创建关节的功能已在计划中,但尚未确定发布日期。
-- 用固定关节约束(绳索)连接两个碰撞对象
physics.create_joint(physics.JOINT_TYPE_FIXED, "obj_a#collisionobject", "my_test_joint", vmath.vector3(10, 0, 0), "obj_b#collisionobject", vmath.vector3(0, 20, 0), { max_length = 20 })
上述代码将创建一个 ID 为 my_test_joint
的固定关节,连接在两个碰撞对象 obj_a#collisionobject
和 obj_b#collisionobject
之间。关节连接在碰撞对象 obj_a#collisionobject
中心左侧 10 像素和碰撞对象 obj_b#collisionobject
中心上方 20 像素的位置。关节的最大长度为 20 像素。
可以使用 physics.destroy_joint()
销毁关节:
-- 销毁先前连接到第一个碰撞对象的关节
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
可以使用 physics.get_joint_properties()
读取关节属性,并使用 physics.set_joint_properties()
设置关节属性:
function update(self, dt)
if self.accelerating then
local hinge_props = physics.get_joint_properties("obj_a#collisionobject", "my_hinge")
-- 将马达速度提高每秒 100 转
hinge_props.motor_speed = hinge_props.motor_speed + 100 * 2 * math.pi * dt
physics.set_joint_properties("obj_a#collisionobject", "my_hinge", hinge_props)
end
end
可以使用 physics.get_joint_reaction_force()
和 physics.get_joint_reaction_torque()
读取施加到关节的反作用力和扭矩。
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB