เหตุการณ์เครื่องยนต์ที่เลื่อนเวลา

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

คุณสมบัติ 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 และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ