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
Uma junta conecta dois objetos de colisão por meio de uma restrição. O Defold oferece suporte a juntas tanto na física 2D quanto na 3D, por meio de APIs diferentes.
Este manual descreve as juntas 2D expostas pelo módulo physics. Desde o Defold 1.13.2, projetos 3D podem criar e controlar restrições por meio de bullet3d.constraint, incluindo dobradiças, deslizadores e molas. Use essa API com corpos rígidos obtidos por meio de bullet3d.get_rigid_body().
Os tipos de junta compatíveis com a API 2D physics são:
bodyB a uma linha em bodyA. O wheel joint também fornece uma mola de suspensão. No Box2D, é chamado de Wheel joint.As juntas 2D descritas aqui são criadas programaticamente usando physics.create_joint():
Suporte do editor para criar joints está planejado, mas nenhuma data de lançamento foi definida.
-- conecta dois objetos de colisão com uma restrição de joint fixo (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 })
O código acima criará um fixed joint com id my_test_joint conectado entre os dois objetos de colisão obj_a#collisionobject e obj_b#collisionobject. O joint é conectado 10 pixels à direita do centro do objeto de colisão obj_a#collisionobject e 20 pixels acima do centro do objeto de colisão obj_b#collisionobject. O comprimento máximo do joint é de 20 pixels.
Um joint pode ser destruído usando physics.destroy_joint():
-- destrói um joint previamente conectado ao primeiro objeto de colisão
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
As propriedades de um joint podem ser lidas usando physics.get_joint_properties() e definidas 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 a velocidade do motor em 100 revoluções 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
A força e o torque de reação aplicados a um joint podem ser lidos usando physics.get_joint_reaction_force() e physics.get_joint_reaction_torque().