Manuals
Manuals




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

Giunti

Defold supporta i giunti (joint) per la fisica 2D. Un giunto collega due oggetti di collisione applicando un vincolo. I tipi di giunto supportati sono:

  • Fisso (physics.JOINT_TYPE_FIXED) - Un giunto a fune che limita la distanza massima tra due punti. In Box2D è chiamato Rope joint.
  • A cerniera (physics.JOINT_TYPE_HINGE) - Un giunto a cerniera definisce un punto di ancoraggio su due oggetti di collisione e li sposta in modo che i due oggetti di collisione si trovino sempre nella stessa posizione, senza limitarne la rotazione relativa. Il giunto a cerniera può attivare un motore con coppia massima e velocità definite. In Box2D è chiamato giunto rotoidale (Revolute joint).
  • Saldato (physics.JOINT_TYPE_WELD) - Un giunto saldato cerca di vincolare tutti i movimenti relativi tra due oggetti di collisione. Puoi rendere il giunto saldato elastico come una molla, definendo una frequenza e un rapporto di smorzamento. In Box2D è chiamato giunto saldato (Weld joint).
  • A molla (physics.JOINT_TYPE_SPRING) - Un giunto a molla mantiene due oggetti di collisione a una distanza costante l’uno dall’altro. Puoi rendere il giunto a molla elastico, definendo una frequenza e un rapporto di smorzamento. In Box2D è chiamato giunto di distanza (Distance joint).
  • A scorrimento (physics.JOINT_TYPE_SLIDER) - Un giunto a scorrimento consente la traslazione relativa di due oggetti di collisione lungo un asse specificato e ne impedisce la rotazione relativa. In Box2D è chiamato giunto prismatico (Prismatic joint).
  • A ruota (physics.JOINT_TYPE_WHEEL) - Un giunto a ruota vincola un punto su bodyB a una retta su bodyA. Il giunto a ruota fornisce anche una molla di sospensione. In Box2D è chiamato giunto a ruota (Wheel joint).

Creazione dei giunti

Attualmente puoi creare i giunti soltanto tramite codice, utilizzando 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.

Distruzione dei giunti

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")

Lettura e aggiornamento dei giunti

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

Lettura della forza e della coppia di reazione del giunto

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().