スケジュールコードは、特定のアクションやサイクルが完了した後にコードが実行されるか、特定の期間の時間を遅延するなど、多くの状況で有用です。 ライブラリを使用して、RobloRoblox(ロブロックス) の タスクスケジューラー を最適化して、コードを管理し、スケジュールすることができます。また、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
タスク.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 。