กำหนดรหัสเวลา

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

การกำหนดเวลาโค้ดมีประโยชน์ในหลายสถานการณ์ เช่น การให้โค้ดดำเนินการหลังจากที่การดำเนินการหรือรอบตามที่กำหนดเสร็จสิ้นแล้ว หรือการชะลอโค้ดเป็นระยะเวลาที่กำหนดไว้คุณสามารถใช้ห้องสมุด task รหัสRoblox เพื่อจัดการและกำหนดเวลาโค้ดคุณยังสามารถใช้ห้องสมุดที่คล้ายกันชื่อ coroutine เพื่อกำหนดเวลาโค้ดที่มีฟังก์ชันเพิ่มเติม

วิธีทั่วไป

ต่อไปนี้เป็นวิธีที่ใช้บ่อยที่สุด task รหัสwait() เพื่อให้แน่ใจว่าโค้ดของคุณทำงานได้อย่างเหมาะสม

ตารางต่อไปนี้ระบุวิธีการทั่วไประดับโลกที่เกี่ยวข้องและคู่แข่งที่ชื่นชอบและเหมาะสมยิ่งขึ้น:

| วิธีการทั่วโลกรุ่นเก่า | วิธีการทํางานของภารกิจ | ทางเลือกเพิ่มเติม | | :-------------------------------------- | :------------------------------------------------- | :------------------------------------------------- | | wait() | task.wait() | RunService.Heartbeat | | wait(n) | Library.task.wait()\|task.wait(n) | | | spawn(f) | Library.task.defer()\|task.defer(f) | Library.task.delay()\|task.delay(0, f) | | delay(n, f) | Library.task.delay()\|task.delay(n, f) | | | spawn(function() f(uv1, ...) end) | Library.task.defer()\|task.defer(f, uv1, ...) | Library.task.delay()\|task.delay(0, f, uv1, ...) | | delay(n, function() f(uv1, ...) end) | Library.task.delay()\|task.delay(n, f, uv1, ...) | |

สร้างภารกิจ.spawn

task.spawn() ใช้กระทู้หรือฟังก์ชันและดำเนินการต่อได้ทันทีภายในตัวจัดกำหนดเวลาของเครื่องยนต์ ทันที ผ่านตัวจัดกำหนดเวลาอาร์กิวเมนต์เพิ่มเติมจะถูกส่งไปยังหัวข้อหรือฟังก์ชันที่ถูกระงับการทำงาน

ตัวอย่างโค้ดต่อไปนี้เป็นตัวอย่างของวิธีที่คุณสามารถใช้ task.spawn() เมื่อเรียกฟังก์ชันที่อาจให้ผลในขณะที่กําลังเรียกดูชุดของวัตถุ:


local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end

ภารกิจ.defer

task.defer() ใช้กระทู้หรือฟังก์ชันและเลื่อนออกไปจนกว่าจะถึงรอบการดำเนินการถัดไป ระยะเวลาการชะงักงัน ในจุดนั้นมันจะถูกดำเนินการต่อไปด้วยตัวจัดการกำหนดเวลาของเครื่องยนต์อาร์กิวเมนต์เพิ่มเติมจะถูกส่งไปยังกระบวนการหรือฟังก์ชันที่กำลังดำเนินการต่อ

คุณควรใช้สิ่งนี้เมื่อต้องการพฤติกรรมที่คล้ายกันกับ task.spawn() แต่ไม่สนใจเรื่องการดำเนินการของกระทู้ทันทีตัวอย่างโค้ดต่อไปนี้แสดงวิธีการที่คำสั่ง print() สำหรับ "A" จะถูกเลื่อนออกไปจนกว่าคำสั่ง print() สำหรับ "B" จะดำเนินการ:


task.defer(print, "A")
print("B")
--> B
--> A

ภารกิจ.延迟

task.delay() ใช้กระทู้หรือฟังก์ชันและกำหนดการใหม่สำหรับการดำเนินการต่อหลังจากผ่านไประยะเวลาที่กำหนดในขั้นตอนถัดไป Heartbeatกระทู้จะดำเนินการต่อด้วยการจัดการข้อผิดพลาดและการสนับสนุนฟีเจอร์เครื่องยนต์อื่นๆ ที่มีอยู่อาร์กิวเมนต์เพิ่มเติมใดๆ จะถูกส่งไปยังกระบวนการหรือฟังก์ชันที่กำลังดำเนินการต่อ

เนื่องจากเวลาความล่าช้าจริงอาจแตกต่างกัน ตัวอย่างโค้ดต่อไปนี้แสดงวิธีที่คุณสามารถคำนวณได้โดยส่งเวลาปัจจุบันเป็นอาร์กิวเมนต์:


task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())

ระยะเวลาเป็นศูนย์จะทำให้กระทู้หรือฟังก์ชันกลับมาในขั้นตอนต่อไป

รอภารกิจ

task.wait() สร้างกระทู้ปัจจุบันจนกว่าระยะเวลาที่กำหนด (ในวินาที) จะหมดลงแล้วเริ่มต้นกระทู้ในขั้นตอนต่อไป Heartbeat

เวลาการให้ผลที่แท้จริงอาจแตกต่างกัน ตัวอย่างโค้ดต่อไปนี้แสดงวิธีที่วิธีนี้ส่งคืนเพื่อความสะดวก:

เนื่องจากเวลาความล่าช้าจริงอาจแตกต่างกัน ตัวอย่างโค้ดต่อไปนี้แสดงวิธีที่คุณสามารถรับเวลาจริงได้โดยเก็บค่าการ返回ของวิธี:


local elapsedTime = task.wait(2) -- รอ 2 วินาที
print(elapsedTime) --> 2.0792941

หากไม่มีระยะเวลาที่กำหนดระยะเวลาจะเป็นศูนย์หมายความว่ากระทู้จะถูกดำเนินการต่ออัตโนมัติในขั้นตอนต่อไปซึ่งหมายความว่า task.wait() เทียบเท่าในพฤติกรรมกับ RunService.Heartbeat