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
İki nesne çarpıştığında motor olay geri çağırımına (event callback) bir olay (event) gönderir veya her iki nesnenin tüm alıcılarına iletiler (message) gönderir.
Üretilecek olay türleri, her nesnenin şu bayraklarıyla kontrol edilebilir:
Bunların tümü varsayılan olarak true değerindedir.
İki çarpışma nesnesi (collision object) etkileşime girdiğinde, bu onay kutularına göre kullanıcıya ileti gönderilip gönderilmeyeceğini kontrol ederiz.
Örneğin, “Generate Contact Events” onay kutuları için:
physics.set_event_listener() kullanıldığında:
| Bileşen A | Bileşen B | İleti gönderilir mi? |
|---|---|---|
| ✅︎ | ✅︎ | Evet |
| ❌ | ✅︎ | Evet |
| ✅︎ | ❌ | Evet |
| ❌ | ❌ | Hayır |
Varsayılan ileti işleyicisi kullanıldığında:
| Bileşen A | Bileşen B | İleti(ler) gönderilir mi? |
|---|---|---|
| ✅︎ | ✅︎ | Evet (A,B) + (B,A) |
| ❌ | ✅︎ | Evet (B,A) |
| ✅︎ | ❌ | Evet (A,B) |
| ❌ | ❌ | Hayır |
Çarpışan nesnelerden biri “dynamic”, “kinematic” veya “static” türündeyse "collision_response" iletisi gönderilir. Bu iletinin aşağıdaki alanları doldurulur:
other_idhash)other_positionvector3)other_grouphash)own_grouphash)collision_response iletisi, yalnızca nesnelerin gerçekte nasıl kesiştiğine dair ayrıntılara ihtiyaç duymadığınız çarpışmaları çözmek için yeterlidir; örneğin bir merminin düşmana isabet edip etmediğini algılamak istediğinizde kullanılabilir. Her karede, çarpışan her nesne çifti için bu iletilerden yalnızca bir tane gönderilir.
function on_message(self, message_id, message, sender)
-- check for the message
if message_id == hash("collision_response") then
-- take action
print("I collided with", message.other_id)
end
end
Çarpışan nesnelerden biri “dynamic” veya “kinematic”, diğeri ise “dynamic”, “kinematic” veya “static” türündeyse "contact_point_response" iletisi gönderilir. Bu iletinin aşağıdaki alanları doldurulur:
positionvector3).normalvector3).relative_velocityvector3).distancenumber).applied_impulsenumber).life_timenumber).massnumber).other_massnumber).other_idhash).other_positionvector3).other_grouphash).own_grouphash).Nesneleri tamamen ayırmanız gereken bir oyun veya uygulamada, "contact_point_response" iletisi ihtiyacınız olan tüm bilgileri sağlar. Ancak, çarpışmanın niteliğine bağlı olarak, çarpışan herhangi bir nesne çifti için her karede birden fazla "contact_point_response" iletisi alınabileceğini unutmayın. Daha fazla bilgi için Çarpışmaları çözme kılavuzuna bakın.
function on_message(self, message_id, message, sender)
-- check for the message
if message_id == hash("contact_point_response") then
-- take action
if message.other_mass > 10 then
print("I collided with something weighing more than 10 kilos!")
end
end
end
Çarpışan nesnelerden biri “trigger” türündeyse "trigger_response" iletisi gönderilir. İleti, çarpışma ilk algılandığında bir kez, nesnelerin çarpışması sona erdiğinde ise bir kez daha gönderilir. Aşağıdaki alanları içerir:
other_idhash).entertrue, çıkış ise false değerini alır. (boolean).other_grouphash).own_grouphash).function on_message(self, message_id, message, sender)
-- check for the message
if message_id == hash("trigger_response") then
if message.enter then
-- take action for entry
print("I am now inside", message.other_id)
else
-- take action for exit
print("I am now outside", message.other_id)
end
end
end