أحداث محرك مؤجلة

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

خاصية Workspace.SignalBehavior تتحكم فيما إذا كانت معالجات الأحداث تُطلق على الفور أم تؤجل. يُوصى بخيار Enum.SignalBehavior.Deferred الذي يساعد على تحسين أداء المحرك وصحته. يتم استئناف معالجات الأحداث الخاصة بـ الأحداث المؤجلة في النقطة التالية لنقطة الاستئناف، جنبًا إلى جنب مع أي معالجات أحداث جديدة تم تفعيلها.

المخطط التالي يقارن بين سلوك الأحداث Immediate وسلوك الأحداث Deferred.

  • مع سلوك Immediate، إذا تم تفعيل حدث آخر، يتم تشغيل معالج الحدث الثاني على الفور.
  • مع سلوك Deferred، يتم إضافة الحدث الثاني إلى مؤخرة قائمة الانتظار ويتم تشغيله لاحقًا.

الوقت الكلي المستغرق لا يتغير، لكن الترتيب مختلف.

مقارنة بين إطلاق ثلاثة معالجات أحداث مع سلوك Immediate وDeferred

"إعادة الدخول" تمنع الأحداث من إطلاق نفسها باستمرار عندما تصل إلى عمق معين. الحد الحالي لذلك هو 10.

فوائد الأحداث المؤجلة

سلوك Immediate له بعض العيوب. لكل مثيل مُضاف إلى لعبتك، أو خاصية تتغير، أو أي تفعيل آخر، يحتاج المحرك إلى تشغيل كود Luau قبل حدوث أي شيء آخر.

  • لتغيير 1,000 خاصية، يجب أن يعمل 1,000 مقتطف من الكود بعد كل تغيير محتمل.
  • يمكن أن تحدث أخطاء غريبة وصعبة التشخيص، مثل حدوث حدث إزالة قبل إضافة شيء ما.
  • يمكن أن تطلق الأنظمة الحساسة للأداء أحداثًا تتطلب منها أن تعود ذهابًا وإيابًا إلى Luau.
  • يمكن لمعالجات الأحداث إجراء تغييرات على المكان أو تفعيل أحداث أخرى في أي وقت يتم فيه إطلاق حدث.
  • يمكن أن يتم تنشيط حدث عدة مرات رغم كونه زائدا، مثل تغيير خاصية مرتين.

من خلال وجود أجزاء محددة من دورة حياة المحرك يمكن تشغيل Luau فيها، يمكن أن يكسب المحرك أداءً محسناً من خلال استخدام عدد من الافتراضات:

  • الأنظمة الحساسة للأداء لا تحتاج إلى العودة إلى Luau، مما يؤدي إلى مكاسب في الأداء.
  • ما لم يتغير محرك نفسه، فإن المكان لا يتغير خارج نقطة استئناف.

نقاط الاستئناف

بعد أن يتم تأجيله، يتم استئناف معالج الحدث في نقطة الاستئناف التالية. حاليًا، تشمل مجموعة نقاط الاستئناف:

أنماط الكود الأكثر تأثراً

مع الأحداث البعيدة، الأمثلة التالية إما تتوقف عن العمل بشكل صحيح أو تتمتع بسلوك مختلف بشكل طفيف؛ تعتمد على استئناف الأحداث على الفور.

تفعيل الأحداث والتقاطها أثناء التنفيذ

في هذا المثال، يتم دائمًا إرجاع false عند تمكين الأحداث المؤجلة لأن استدعاء العودة لم يؤدي إلى التنفيذ. للعمل بشكل صحيح، يجب أن يعود الخيط حتى على الأقل عندما كان يجب أن يُفعُل الحدث.


local success = false
event:Connect(function ()
success = true
end)
doSomethingToTriggerEvent() -- يؤدي إلى تفعيل `event`
return success

الاستماع لأول حدوث لحدث


connection = event:Connect(function ()
connection:Disconnect()
-- قم بشيء ما
end)

مع تمكين الأحداث المؤجلة، يمكن أن يتم تضمين العديد من استدعاءات معالج الحدث قبل أن تقوم بفصل الاتصال. استدعاء Disconnect() يسقط جميع استدعاءات معالج الحدث المعلقة—نفس السلوك الذي يوجد للأحداث الفورية.

بدلاً من ذلك، استخدم Once() كطريقة أكثر ملاءمة للاتصال بحدث تحتاج فقط إلى أول استدعاء له.

الأحداث التي تغير السلالة أو الخصائص

تؤدي الأحداث المؤجلة إلى حدوث أحداث تتعامل مع تغيير في السلالة أو خاصية ليتم تفعيلها بعد تغيير السلالة أو الخاصية:


local part = Instance.new("Part", workspace)
local function onPartDestroying()
print("في الإشارة:", part:GetFullName(), #part:GetChildren())
end
part.Destroying:Connect(onPartDestroying)
part:Destroy()

لأن Destroy() يعمل على الفور بعد أن يقوم السكربت الذي استدعاه بالإرجاع، فإن الكائن قد تم تدميره بالفعل بحلول الوقت الذي يتم فيه استدعاء onPartDestroying(). لرؤية المزيد من الأمثلة، انظر Instance.Destroying.

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.