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
З’єднання (joint) сполучає два об’єкти колізій (collision objects) за допомогою обмеження. Defold підтримує з’єднання як у 2D-, так і в 3D-фізиці через різні API.
Цей посібник описує 2D-з’єднання, які надає модуль physics. Починаючи з Defold 1.13.2, у 3D-проєктах можна створювати обмеження й керувати ними через bullet3d.constraint, зокрема шарнірами, повзунками й пружинами. Використовуйте цей API з твердими тілами, отриманими через bullet3d.get_rigid_body().
В API physics для 2D підтримуються такі типи з’єднань:
bodyB лінією на bodyA. Колісне з’єднання також забезпечує пружину підвіски. У Box2D його називають колісним з’єднанням (Wheel joint).Описані тут 2D-з’єднання створюються програмно за допомогою physics.create_joint():
Підтримка створення з’єднань у редакторі запланована, але дату випуску ще не визначено.
-- 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 })
Наведений вище код створить фіксоване з’єднання з ідентифікатором my_test_joint між двома об’єктами колізій obj_a#collisionobject і obj_b#collisionobject. З’єднання кріпиться на 10 пікселів праворуч від центра об’єкта колізій obj_a#collisionobject і на 20 пікселів вище від центра об’єкта колізій obj_b#collisionobject. Максимальна довжина з’єднання становить 20 пікселів.
З’єднання можна знищити за допомогою physics.destroy_joint():
-- destroy a joint previously connected to the first collision object
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
Властивості з’єднання можна прочитати за допомогою physics.get_joint_properties() і встановити за допомогою physics.set_joint_properties():
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
Силу реакції та крутний момент, прикладені до з’єднання, можна прочитати за допомогою physics.get_joint_reaction_force() і physics.get_joint_reaction_torque().