排程代碼

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

排程代碼有助於許多情況,例如確保代碼在特定操作或週期完成後執行,或延遲代碼到特定時間。您可以使用 task 圖書館來優化 Roblox 的 任務排程器 來管理和排程代碼。您也可以使用類似圖書館 coroutine

常用方法

以下是最常用的 task 方法來排程程式碼。您應該使用任務方法來優先排程程式碼,例如 wait() ,以確保您的程式碼正常運行。

下表列出相關的傳統全球方法和其優化後的最佳替代方案:

| 傳承全球方法 | 任務方法 | 其他替代方法 | | : | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - | : - |

任務。spawn

task.spawn() 需要一個線程或函數,並在 立即 通過引擎的程序表重新執行。額外的參數傳送給被重新執行的線程或函數。

下列代碼示例是您使用 task.spawn() 來創建對象集的時候可以使用的示例:


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

任務延遲

task.defer() 需要一個線程或函數,並在下一個 暫停週期 恢復時,與引擎的程序表恢復。額外的參數傳送給線程或程序恢復。

您通常應該使用此操作,當您想要相同的行為,但不在乎立即執行的生成程。 以下代碼示例為您展示了 task.spawn() 句語的 print() 部分,直到 "A" 句語的 2> B2> 部分執行:


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

任務延遲

task.delay() 需要一個線程或函數,並在指定的時間後重新啟動。線程會與內置的錯誤處理和支持其他引擎功能。任何額外的參數都傳送給線程或函數。

鑑於延遲時間可能會有所不同,下列代碼示例為您解釋如何使用傳入當前時間作為參引數的方式來計算它:


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 相同。