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

Articulaciones

Una articulación (joint) conecta dos objetos de colisión mediante una restricción. Defold admite articulaciones tanto en físicas 2D como 3D, mediante APIs distintas.

Este manual describe las articulaciones 2D expuestas por el módulo physics. Desde Defold 1.13.2, los proyectos 3D pueden crear y controlar restricciones mediante bullet3d.constraint, incluidas bisagras, correderas y resortes. Usa esa API con cuerpos rígidos obtenidos mediante bullet3d.get_rigid_body().

Los tipos de articulación compatibles con la API 2D physics son:

  • Fixed (physics.JOINT_TYPE_FIXED) - Una articulación de cuerda que restringe la distancia máxima entre dos puntos. En Box2D se conoce como Rope joint.
  • Hinge (physics.JOINT_TYPE_HINGE) - Una articulación de bisagra especifica un punto de anclaje en dos objetos de colisión y los mueve para que los dos objetos de colisión estén siempre en el mismo lugar, sin restringir la rotación relativa de los objetos de colisión. La articulación de bisagra puede activar un motor con torque máximo y velocidad definidos. En Box2D se conoce como Revolute joint.
  • Weld (physics.JOINT_TYPE_WELD) - Una articulación soldada intenta restringir todo el movimiento relativo entre dos objetos de colisión. La articulación soldada se puede suavizar como un resorte mediante una frecuencia y una relación de amortiguación. En Box2D se conoce como Weld joint.
  • Spring (physics.JOINT_TYPE_SPRING) - Una articulación de resorte mantiene dos objetos de colisión a una distancia constante entre sí. La articulación de resorte se puede suavizar como un resorte mediante una frecuencia y una relación de amortiguación. En Box2D se conoce como Distance joint.
  • Slider (physics.JOINT_TYPE_SLIDER) - Una articulación deslizante permite la traslación relativa de dos objetos de colisión a lo largo de un eje especificado e impide la rotación relativa. En Box2D se conoce como Prismatic joint.
  • Wheel (physics.JOINT_TYPE_WHEEL) - Una articulación de rueda restringe un punto en bodyB a una línea en bodyA. La articulación de rueda también proporciona un resorte de suspensión. En Box2D se conoce como Wheel joint.

Crear articulaciones

Las articulaciones 2D descritas aquí se crean programáticamente usando physics.create_joint():

Está previsto agregar soporte en el editor para crear articulaciones, pero aún no se ha decidido una fecha de lanzamiento.

-- conecta dos objetos de colisión con una restricción de articulación fija (cuerda)
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 })

Lo anterior creará una articulación fija con id my_test_joint, conectada entre los dos objetos de colisión obj_a#collisionobject y obj_b#collisionobject. La articulación está conectada 10 píxeles a la derecha del centro del objeto de colisión obj_a#collisionobject y 20 píxeles por encima del centro del objeto de colisión obj_b#collisionobject. La longitud máxima de la articulación es de 20 píxeles.

Destruir articulaciones

Una articulación se puede destruir usando physics.destroy_joint():

-- destruye una articulación conectada previamente al primer objeto de colisión
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")

Leer y actualizar articulaciones

Las propiedades de una articulación se pueden leer usando physics.get_joint_properties() y definir usando physics.set_joint_properties():

function update(self, dt)
    if self.accelerating then
        local hinge_props = physics.get_joint_properties("obj_a#collisionobject", "my_hinge")
        -- aumenta la velocidad del motor en 100 revoluciones por segundo
        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

Obtener la fuerza y el torque de reacción de una articulación

La fuerza y el torque de reacción aplicados a una articulación se pueden leer usando physics.get_joint_reaction_force() y physics.get_joint_reaction_torque().