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
Ein Gelenk (joint) verbindet zwei Kollisionsobjekte (collision objects) durch eine Zwangsbedingung (constraint). Defold unterstützt Gelenke sowohl in der 2D- als auch in der 3D-Physik über unterschiedliche APIs.
Dieses Handbuch beschreibt die 2D-Gelenke, die das Modul physics bereitstellt. Seit Defold 1.13.2 können 3D-Projekte über bullet3d.constraint Zwangsbedingungen erstellen und steuern, darunter Scharniere, Schieber und Federn. Verwende diese API mit starren Körpern (rigid bodies), die du über bullet3d.get_rigid_body() erhältst.
Die 2D-API physics unterstützt folgende Gelenktypen:
bodyB auf eine Linie auf bodyA. Das Radgelenk stellt außerdem eine Feder für die Aufhängung bereit. In Box2D wird es als Radgelenk (Wheel joint) bezeichnet.Die hier beschriebenen 2D-Gelenke werden per Code mit physics.create_joint() erstellt:
Die Unterstützung für das Erstellen von Gelenken im Editor ist geplant, ein Veröffentlichungsdatum steht jedoch noch nicht fest.
-- 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 })
Das obige Beispiel erstellt ein festes Gelenk mit der ID my_test_joint, das die beiden Kollisionsobjekte obj_a#collisionobject und obj_b#collisionobject verbindet. Das Gelenk ist 10 Pixel rechts vom Mittelpunkt des Kollisionsobjekts obj_a#collisionobject und 20 Pixel oberhalb des Mittelpunkts des Kollisionsobjekts obj_b#collisionobject befestigt. Die maximale Länge des Gelenks beträgt 20 Pixel.
Du kannst ein Gelenk mit physics.destroy_joint() zerstören:
-- destroy a joint previously connected to the first collision object
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
Du kannst die Eigenschaften eines Gelenks mit physics.get_joint_properties() auslesen und mit physics.set_joint_properties() setzen:
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
Du kannst die auf ein Gelenk wirkende Reaktionskraft und das Drehmoment mit physics.get_joint_reaction_force() und physics.get_joint_reaction_torque() auslesen.