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