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

Articulations

Une articulation relie deux objets de collision au moyen d’une contrainte. Defold prend en charge les articulations en physique 2D et 3D, avec des API différentes.

Ce manuel décrit les articulations 2D exposées par le module physics. Depuis Defold 1.13.2, les projets 3D peuvent créer et contrôler des contraintes avec bullet3d.constraint, notamment des charnières, des glissières et des ressorts. Utilisez cette API avec des corps rigides obtenus via bullet3d.get_rigid_body().

Les types d’articulations pris en charge dans l’API 2D physics sont les suivants :

  • Fixe (physics.JOINT_TYPE_FIXED) - Une articulation de type corde qui limite la distance maximale entre deux points. Dans Box2D, elle est appelée articulation de type corde (Rope joint).
  • Pivot (physics.JOINT_TYPE_HINGE) - Une articulation pivot définit un point d’ancrage sur deux objets de collision et les déplace de manière que les deux objets de collision restent toujours au même endroit, sans restreindre leur rotation relative. L’articulation pivot peut activer un moteur avec un couple maximal et une vitesse définis. Dans Box2D, elle est appelée articulation pivot (Revolute joint).
  • Soudure (physics.JOINT_TYPE_WELD) - Une articulation de type soudure tente de contraindre tous les mouvements relatifs entre deux objets de collision. L’articulation de type soudure peut être rendue souple comme un ressort en définissant une fréquence et un taux d’amortissement. Dans Box2D, elle est appelée articulation de type soudure (Weld joint).
  • Ressort (physics.JOINT_TYPE_SPRING) - Une articulation de type ressort maintient une distance constante entre deux objets de collision. L’articulation de type ressort peut être rendue souple comme un ressort en définissant une fréquence et un taux d’amortissement. Dans Box2D, elle est appelée articulation de distance (Distance joint).
  • Glissière (physics.JOINT_TYPE_SLIDER) - Une articulation glissière permet la translation relative de deux objets de collision le long d’un axe spécifié et empêche leur rotation relative. Dans Box2D, elle est appelée articulation prismatique (Prismatic joint).
  • Roue (physics.JOINT_TYPE_WHEEL) - Une articulation de type roue contraint un point de bodyB à se déplacer sur une ligne de bodyA. L’articulation de type roue fournit également un ressort de suspension. Dans Box2D, elle est appelée articulation de type roue (Wheel joint).

Création d’articulations

Les articulations 2D décrites ici sont créées par programmation avec physics.create_joint() :

La prise en charge de la création d’articulations dans l’éditeur est prévue, mais aucune date de sortie n’a été fixée.

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

Le code ci-dessus crée une articulation fixe portant l’identifiant my_test_joint entre les deux objets de collision obj_a#collisionobject et obj_b#collisionobject. L’articulation est reliée à un point situé 10 pixels à droite du centre de l’objet de collision obj_a#collisionobject et à un point situé 20 pixels au-dessus du centre de l’objet de collision obj_b#collisionobject. La longueur maximale de l’articulation est de 20 pixels.

Destruction d’articulations

Vous pouvez détruire une articulation à l’aide de physics.destroy_joint() :

-- destroy a joint previously connected to the first collision object
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")

Lecture et mise à jour des articulations

Vous pouvez lire les propriétés d’une articulation à l’aide de physics.get_joint_properties() et les définir à l’aide de 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

Récupération de la force et du couple de réaction d’une articulation

Vous pouvez lire la force et le couple de réaction appliqués à une articulation à l’aide de physics.get_joint_reaction_force() et de physics.get_joint_reaction_torque().