Erteleme motoru 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 özellikleri, etkinlik işlemcilerinin hemen mi yoksa gecikmeli mi ateş edileceğini kontrol eder.Motorun performansını ve doğruluğunu geliştirmeye yardımcı olan Enum.SignalBehavior.Deferred seçeneğini öneriyoruz. Ertelenmiş olaylar için olay işleyicileri, herhangi bir yeni tetiklenen olay işleyicisi ile birlikte bir sonraki yeniden başlatma noktasında devam eder.

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

  • Immediate davranışıyla, bir etkinlik başka bir etkinliği tetiklerse, ikinci etkinlik işleyicisi hemen ateşlenir.
  • Deferred davranışıyla, ikinci olay bir sırayın arka planına eklenir ve daha sonra çalıştırılır.

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

A comparison of three event handlers firing with Immediate and Deferred behavior

“Yeniden giriş” olayların belli bir derinliğe ulaştığında sürekli olarak birbirlerini ateşlemesini engeller. Bu için mevcut sınır 10'dur.

Erteleme olayı yararları

The Immediate davranışı bazı dezavantajlara sahiptir.oyuneklenen her bir örnek, değiştirilen özellik veya başka bir tetikleyici için, motorun her şeyden önce Luau kodunu çalıştırması gerekir.

  • 1,000 özellik değiştirmek için, her değişiklikten sonra 1,000 kod parçacığı potansiyel olarak çalıştırılması gerekir.
  • Garip, tanımlanması zor hatalar meydana gelçıkabilir, örneğin bir şey eklenmeden önce bir kaldırma olayı ateşleniyor.
  • Performans kritik sistemler, Luau'ya geri dönmelerini gerektiren olayları ateşleyebilir.
  • Etkinlik işlemcileri, bir etkinlik ateşlendiğinde herhangi bir zamanda yere değişiklik yapabilir veya herhangi bir olayı tetikleyebilir.
  • Bir etkinlik, özelliklerin iki kez değişmesi gibi yinelenen bir duruma rağmen birden fazla kez ateş edebilir.

Luau'nun çalışabileceği motor ömrü döngüsünün belirli bölümlerine sahip olarak, motor bir dizi varsayım kullanarak gelişmiş performans kazanabilir:

  • Performans kritik sistemlerin performans kazanımlarına yol açan Luau'ya boyun eğmesi gerekmez.
  • Motorun kendisi değiştirmediği sürece, yer asla bir devam noktasının dışında değişmez.

Yeniden başlama noktaları

Ertelemeden sonra, bir etkinlik işleyicisi bir sonraki yeniden başlatma noktasında yeniden başlatılır. Şu anda, yeniden başlatma noktalarının seti şunları içerir:

Yaygın etkilenen kod patikaları

Uzaktan olaylarla, aşağıdaki örnekler ya doğru çalışmayı durdurur veya ince bir şekilde farklı davranır; anında yeniden başlatılan olaylara güvenirler.

Etkinlikleri tetikleyin ve orta düzeyde yürütme sırasında yakalayın

Bu örnekte, ertelenmiş olaylar etkinleştirildiğinde false daima döndürülür, çünkü geri çağrı henüz çalışmadı.Doğru çalışabilmek için, işletimin en azından olayın ateşlenmesi gerektiğine kadar vermesi gerekir.


local success = false
event:Connect(function ()
success = true
end)
doSomethingToTriggerEvent() -- `etkinlik`yi ateşlemeye neden olur
return success

Bir olayın ilk meydana gelmesini dinle


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

Erteleme olayları etkinleştirildiğinde, olaydan bağlantı kesmeden önce çok sayıda etkinlik işleyicisi çağrısı sıraya alınabilir.Disconnect() çağrısı tüm bekleyen etkinlik işleyici çağrılarını düşürür - aynı davranış, acil olaylar için mevcut olan.

Alternatif olarak, yalnızca ilk çağrıya ihtiyacınız olan bir olaya bağlanmak için Once() daha uygun bir yöntem olarak kullanın.

Ataları veya özellikleri değiştiren olaylar

Erteleme olayları, atalığın veya bir özelliğin değişimini ele alan olayları, atalık veya özellik değiştirildikten sonra ateş etmesine neden olur:


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

Çünkü Destroy() çağıran senaryonun hemen ardından çalıştığı için, örnek zaten çağrıldığında yok edildi onPartDestroying().Daha fazla örnek için, bakın Instance.Destroying .