Defold obsługuje łączenia (ang. joints) w fizyce 2D. Łączenie łączy ze sobą dwa obiekty kolizji za pomocą wybranego rodzaju ograniczenia. Obsługiwane rodzaje połączeń to:
Obecnie połączenia można tworzyć tylko programowo za pomocą funkcji physics.create_joint()
:
Wsparcie Edytora do tworzenia połączeń jest planowane, ale nie ustalono jeszcze daty wydania.
-- połącz dwa obiekty kolizyjne za pomocą połączenia liny (fixed 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 })
Powyższy kod utworzy stałe połączenie o identyfikatorze my_test_joint
, połączone między dwoma obiektami kolizyjnymi obj_a#collisionobject
i obj_b#collisionobject
. Połączenie jest ustanowione 10 pikseli na lewo od środka obiektu kolizyjnego obj_a#collisionobject
i 20 pikseli nad środkiem obiektu kolizyjnego obj_b#collisionobject
. Maksymalna długość połączenia wynosi 20 pikseli.
Połączenie można zniszczyć za pomocą funkcji physics.destroy_joint()
:
-- zniszcz połączenie, które było wcześniej podłączone do pierwszego obiektu kolizyjnego
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
Właściwości połączenia można odczytać za pomocą funkcji physics.get_joint_properties()
i ustawić za pomocą funkcji 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ść silnika 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, które zostały zastosowane do połączenia, można odczytać za pomocą funkcji odpowiednio physics.get_joint_reaction_force()
i physics.get_joint_reaction_torque()
.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB