การกำหนดเวลาโค้ดมีประโยชน์ในหลายสถานการณ์ เช่น การให้โค้ดดำเนินการหลังจากที่การดำเนินการหรือรอบตามที่กำหนดเสร็จสิ้นแล้ว หรือการชะลอโค้ดเป็นระยะเวลาที่กำหนดไว้คุณสามารถใช้ห้องสมุด 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