Ertelenmiş motor olayları

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Workspace.SignalBehavior özelliği, olay işleyicilerinin hemen mi yoksa ertelenmiş olarak mı tetiklendiğini kontrol eder. Enum.SignalBehavior.Deferred seçeneği önerilir ve bu, motorun performansını ve doğruluğunu artırmaya yardımcı olur. Ertelenmiş olaylar için olay işleyicileri, yeniden başlatma noktası sırasında yeniden başlatılır ve bu noktaya ek olarak tetiklenen diğer olay işleyicileriyle birlikte çalıştırılır.

Aşağıdaki diyagram, Immediate olay davranışını ve Deferred olay davranışını karşılaştırır.

  • Immediate davranışında, bir olay başka bir olayı tetiklerse, ikinci olay işleyicisi hemen çalışır.
  • Deferred davranışında, ikinci olay bir kuyruğun arkasına eklenir ve daha sonra çalıştırılır.

Alınan toplam süre değişmez, ancak sıralama farklıdır.

Hızlı ve Ertelenmiş davranışlarla üç olay işleyicisinin tetiklenmesi karşılaştırması

"Yeniden giriş" olayların belirli bir derinliğe ulaştığında sürekli olarak birbirini tetiklemesini engeller. Bunun için mevcut limit 10'dur.

Ertelenmiş olayların faydaları

Immediate davranışının bazı dezavantajları vardır. Oyununuza eklenen her bir örnek için, değişen özellik veya tetiklenen başka bir tetikleyici için motor, başka hiçbir şey olmadan önce Luau kodunu çalıştırmak zorundadır.

  • 1.000 özelliği değiştirmek için, her bir değişiklikten sonra potansiyel olarak 1.000 kod parçası çalıştırılmalıdır.
  • Bir şey eklenmeden önce bir kaldırma olayının tetiklenmesi gibi garip, teşhis edilmesi zor hatalar oluşabilir.
  • Performans açısından kritik sistemler, Luau'ya geri dönmesi gereken olaylar tetikleyebilir.
  • Olay işleyicileri, bir olay tetiklendiğinde yerin değişikliklerini yapabilir veya diğer olayları tetikleyebilir.
  • Bir özellik iki kez değişmesine rağmen bir olay birden fazla kez tetiklenebilir.

Luau'nun çalışabileceği motor yaşam döngüsünün belirli kısımlarına sahip olmak, motorun bazı varsayımları kullanarak performansını artırmasını sağlar:

  • Performans açısından kritik sistemler Luau'ya geçmek zorunda değildir, bu da performans kazancına yol açar.
  • Motor kendisi değişmediği sürece, yer hiçbir zaman bir yeniden başlatma noktası dışında değişmez.

Yeniden başlatma noktaları

Ertelendiğinde, bir olay işleyicisi bir sonraki yeniden başlatma noktasında yeniden başlatılır. Şu anda, yeniden başlatma noktaları seti şunları içerir:

Sık karşılaşılan etkilenen kod desenleri

Uzak olaylarla, aşağıdaki örnekler ya doğru çalışmayı durdurur ya da hafif farklı bir davranış sergiler; bu etkilenen olayların hemen yeniden başlatılmasına dayanır.

Yürütme sırasında olay tetikleyip yakalama

Bu örnekte, ertelenmiş olaylar etkinleştirildiğinde false her zaman döndürülür çünkü geri çağırma çalışmamıştır. Doğru çalışabilmesi için, iş parçacığı olayın tetiklenmesi gereken zamana kadar beklemelidir.


local success = false
event:Connect(function ()
success = true
end)
doSomethingToTriggerEvent() -- `event`'in tetiklenmesine neden olur
return success

Bir olayın ilk gerçekleşmesini dinleme


connection = event:Connect(function ()
connection:Disconnect()
-- bir şey yap
end)

Ertelenmiş olaylar etkinleştirildiğinde, bir olaya bağlantınızı kesmeden önce birden çok olay işleyici çağrısı kuyruğa alınabilir. Disconnect() çağrısını yapmak, tüm bekleyen olay işleyici çağrılarını düşürür - bu, hemen olaylar için mevcut olan aynı davranıştır.

Alternatif olarak, yalnızca ilk tetiklenişine ihtiyacınız olan bir olaya bağlanmak için Once() kullanarak daha pratik bir yöntem olarak kullanılabilir.

Soy kütüğünü veya özellikleri değiştiren olaylar

Ertelenmiş olaylar, soy kütüğünde veya bir özellikte bir değişiklik işleyen olayların, soy kütüğü veya özellik değiştirildiğinde tetiklenmesine neden olur:


local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("Sinyalde:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()

Destroy() çağrısı, çağrısının ardından hemen çalıştığı için, onPartDestroying() çağrılmadan önce örnek zaten yok edilmiştir. Daha fazla örnek için Instance.Destroying bölümüne bakın.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.