Defold поддерживает сочленения для 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()
.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB