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
Un giunto (joint) collega due oggetti di collisione applicando un vincolo. Defold supporta giunti sia nella fisica 2D sia in quella 3D, attraverso API diverse.
Questo manuale descrive i giunti 2D esposti dal modulo physics. Da Defold 1.13.2, i progetti 3D possono creare e controllare vincoli tramite bullet3d.constraint, tra cui cerniere, cursori e molle. Usa questa API con i corpi rigidi ottenuti tramite bullet3d.get_rigid_body().
I tipi di giunto supportati dall’API 2D physics sono:
bodyB a una retta su bodyA. Il giunto a ruota fornisce anche una molla di sospensione. In Box2D è chiamato giunto a ruota (Wheel joint).I giunti 2D descritti qui vengono creati tramite codice usando physics.create_joint():
È previsto il supporto alla creazione dei giunti nell’editor, ma non è ancora stata stabilita una data di rilascio.
-- connect two collision objects with a fixed joint constraint (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 })
Il codice precedente crea un giunto fisso con ID my_test_joint che collega i due oggetti di collisione obj_a#collisionobject e obj_b#collisionobject. Il giunto è collegato 10 pixel a destra del centro dell’oggetto di collisione obj_a#collisionobject e 20 pixel sopra il centro dell’oggetto di collisione obj_b#collisionobject. La lunghezza massima del giunto è di 20 pixel.
Puoi distruggere un giunto utilizzando physics.destroy_joint():
-- destroy a joint previously connected to the first collision object
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
Puoi leggere le proprietà di un giunto utilizzando physics.get_joint_properties() e impostarle utilizzando physics.set_joint_properties():
function update(self, dt)
if self.accelerating then
local hinge_props = physics.get_joint_properties("obj_a#collisionobject", "my_hinge")
-- increase motor speed by 100 revolutions per second
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
Puoi leggere la forza e la coppia di reazione applicate a un giunto utilizzando physics.get_joint_reaction_force() e physics.get_joint_reaction_torque().