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-, так и в 3D-физике, используя разные API.
Это руководство описывает 2D-сочленения, предоставляемые модулем physics. Начиная с Defold 1.13.2, в 3D-проектах можно создавать ограничения и управлять ими через bullet3d.constraint, включая шарниры, слайдеры и пружины. Используйте этот API с твёрдыми телами, полученными через bullet3d.get_rigid_body().
В 2D API physics поддерживаются следующие типы сочленений:
bodyB перемещением вдоль линии на bodyA. Также оно обеспечивает эффект пружинной подвески. В Box2D известно как Wheel joint.Описанные здесь 2D-сочленения создаются программно вызовом 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 })
Код выше создаст фиксированное сочленение с идентификатором my_test_joint соединенным между obj_a#collisionobject и obj_b#collisionobject. Сочленение присоединено в 10 пикселях правее центра объекта столкновения obj_a#collisionobject и 20 пикселями выше центра объекта столкновения obj_b#collisionobject. Максимальная длина сочленения — 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().