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
Eklem (joint), bir kısıt (constraint) kullanarak iki çarpışma nesnesini (collision object) birbirine bağlar. Defold, farklı API’ler aracılığıyla hem 2B hem de 3B fizikte eklemleri destekler.
Bu kılavuz, physics modülünün sunduğu 2B eklemleri açıklar. Defold 1.13.2 sürümünden itibaren 3B projeler, bullet3d.constraint aracılığıyla menteşeler, kayar eklemler ve yaylar dahil çeşitli kısıtlar oluşturabilir ve bunları kontrol edebilir. Bu API’yi, bullet3d.get_rigid_body() aracılığıyla elde edilen katı cisimlerle (rigid body) kullanın.
2B physics API’sinde desteklenen eklem türleri şunlardır:
bodyB üzerindeki bir noktayı bodyA üzerindeki bir doğru üzerinde hareket edecek şekilde kısıtlar. Tekerlek eklemi ayrıca bir süspansiyon yayı sağlar. Box2D’de tekerlek eklemi (Wheel joint) olarak adlandırılır.Burada açıklanan 2B eklemler, physics.create_joint() kullanılarak program yoluyla oluşturulur:
Düzenleyicide eklem oluşturma desteği planlanmaktadır, ancak henüz bir yayımlanma tarihi belirlenmemiştir.
-- 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 })
Yukarıdaki kod, obj_a#collisionobject ve obj_b#collisionobject çarpışma nesneleri arasında my_test_joint tanımlayıcısına sahip sabit bir eklem oluşturur. Eklem, obj_a#collisionobject çarpışma nesnesinin merkezinin 10 piksel sağına ve obj_b#collisionobject çarpışma nesnesinin merkezinin 20 piksel yukarısına bağlanır. Eklemin maksimum uzunluğu 20 pikseldir.
Bir eklem, physics.destroy_joint() kullanılarak yok edilebilir:
-- destroy a joint previously connected to the first collision object
physics.destroy_joint("obj_a#collisionobject", "my_test_joint")
Bir eklemin özellikleri, physics.get_joint_properties() kullanılarak okunabilir ve physics.set_joint_properties() kullanılarak ayarlanabilir:
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
Bir ekleme uygulanan tepki kuvveti ve tork, physics.get_joint_reaction_force() ve physics.get_joint_reaction_torque() kullanılarak okunabilir.