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

Joints

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:

  • Fixed (physics.JOINT_TYPE_FIXED) - Um rope joint que restringe a distância máxima entre dois pontos. No Box2D, é chamado de Rope joint.
  • Hinge (physics.JOINT_TYPE_HINGE) - Um hinge joint especifica um ponto de âncora em dois objetos de colisão e os move para que os dois objetos de colisão estejam sempre no mesmo lugar, sem restringir a rotação relativa dos objetos de colisão. O hinge joint pode habilitar um motor com torque máximo e velocidade definidos. No Box2D, é chamado de Revolute joint.
  • Weld (physics.JOINT_TYPE_WELD) - Um weld joint tenta restringir todo movimento relativo entre dois objetos de colisão. O weld joint pode ser suavizado como uma mola, com frequência e fator de amortecimento. No Box2D, é chamado de Weld joint.
  • Spring (physics.JOINT_TYPE_SPRING) - Um spring joint mantém dois objetos de colisão a uma distância constante um do outro. O spring joint pode ser suavizado como uma mola, com frequência e fator de amortecimento. No Box2D, é chamado de Distance joint.
  • Slider (physics.JOINT_TYPE_SLIDER) - Um slider joint permite a translação relativa de dois objetos de colisão ao longo de um eixo especificado e impede rotação relativa. No Box2D, é chamado de Prismatic joint.
  • Wheel (physics.JOINT_TYPE_WHEEL) - Um wheel joint restringe um ponto em bodyB a uma linha em bodyA. O wheel joint também fornece uma mola de suspensão. No Box2D, é chamado de Wheel joint.

Criando joints

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.

Destruindo joints

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

Lendo e atualizando joints

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

Obter força e torque de reação do joint

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