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
Łączenie wiąże dwa obiekty kolizji za pomocą ograniczenia. Defold obsługuje łączenia zarówno w fizyce 2D, jak i 3D, przez różne API.
Ta instrukcja opisuje łączenia 2D udostępniane przez moduł physics. Od wersji Defold 1.13.2 projekty 3D mogą tworzyć ograniczenia, w tym zawiasy, suwaki i sprężyny, oraz nimi sterować przez bullet3d.constraint. Używaj tego API z ciałami sztywnymi uzyskanymi przez bullet3d.get_rigid_body().
API physics dla 2D obsługuje następujące typy łączeń:
bodyB do linii na bodyA. Zapewnia też sprężynę zawieszenia. W Box2D odpowiada Wheel joint.Opisane tutaj łączenia 2D tworzy się programowo za pomocą physics.create_joint():
Obsługa tworzenia łączeń w edytorze jest planowana, ale nie ustalono jeszcze daty wydania.
-- połącz dwa obiekty kolizji za pomocą stałego ograniczenia łączenia (rope)
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 })
Powyższy przykład tworzy łączenie typu Fixed o id my_test_joint pomiędzy obiektami kolizji obj_a#collisionobject i obj_b#collisionobject. Łączenie jest umieszczone 10 pikseli na prawo od środka obj_a#collisionobject i 20 pikseli nad środkiem obj_b#collisionobject. Maksymalna długość łączenia wynosi 20 pikseli.
Łączenie można zniszczyć za pomocą physics.destroy_joint():
-- zniszcz łączenie wcześniej podłączone do pierwszego obiektu kolizji
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
Właściwości łączenia można odczytać przez physics.get_joint_properties(), a ustawić przez physics.set_joint_properties():
function update(self, dt)
if self.accelerating then
local hinge_props = physics.get_joint_properties("obj_a#collisionobject", "my_hinge")
-- zwiększ prędkość motoru o 100 obrotów na sekundę
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
Siłę reakcji i moment reakcji działające na łączenie można odczytać funkcjami physics.get_joint_reaction_force() oraz physics.get_joint_reaction_torque().