时间表代验证码

*此内容使用人工智能(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() 但不关心立即运行的线程时使用此功能。以下代码示例展示了如何在 声明执行之后才能推迟 声明的执行:


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