Planowanie kodu jest przydatne w wielu sytuacjach, takich jak zapewnienie wykonania kodu po zakończeniu określonej akcji lub cyklu lub opóźnienie kodu przez określony czas.Możesz użyć biblioteki , aby zoptymalizować harmonogram zadań Roblox'a w celu zarządzania i planowania kodu.Możesz również użyć podobnej biblioteki o nazwie coroutine, aby zaplanować kod z dodatkową funkcjonalnością.
Wspólne metody
Najczęstsze metody task używane do harmonogramowania kodu to:Powinieneś używać metod zadań nad metodami planowania dziedzictwa, takimi jak wait(), aby zapewnić, że twój kod będzie optymalnie wykonywany.
Poniższa tabela wymienia odpowiednie globalne metody dziedzictwa i ich preferowane, bardziej zoptymalizowane odpowiedniki:
| Legacy globalne metody | Metody zadań | Dodatkowe alternatywy | | :-------------------------------------- | :------------------------------------------------- | :------------------------------------------------- | | 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 zadanie
task.spawn() bierze wątek lub funkcję i wznowia ją natychmiast poprzez harmonogramera silnika.Dodatkowe argumenty są przekazywane do wątku lub funkcji, która została wznowiona.
Poniższy przykład kodu jest przykładem tego, jak możesz używać task.spawn() podczas wywoływania funkcji, która może wydać się podczas iterowania nad zestawem obiektów:
local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
zadanie.defer
task.defer() bierze wątek lub funkcję i odkłada ją do następnego cyklu odnowienia, w którym jest ponownie wznowiona z harmonogramem silnika.Dodatkowe argumenty są przekazywane do wznowienia wątku lub funkcji.
Zazwyczaj powinieneś używać tego, gdy chcesz podobnego zachowania do task.spawn(), ale nie obchodzi cię wątek uruchamiany natychmiast.Poniższy przykład kodu pokazuje, jak oświadczenie print() dla "A" będzie odłożone do czasu wykonania oświadczenia print() dla "B":
task.defer(print, "A")print("B")--> B--> A
zadanie.延迟
task.delay() bierze wątek lub funkcję i planuje ją na wznowienie po upływie określonej ilości czasu na następnym kroku Heartbeat.Wątek wznowi działanie z wbudowaną obsługą błędów i wsparciem dla innych funkcji silnika.Wszystkie dodatkowe argumenty są przekazywane do wznowienia wątku lub funkcji.
Ponieważ czas opóźnienia rzeczywisty może się różnić, poniższy przykład kodu pokazuje, jak można go obliczyć, przekazując obecny czas jako argument:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Okres zero spowoduje wznowienie wątku lub funkcji na następnym kroku.
zadanie.wait
task.wait() wygeneruje obecny wątek, aż minie określony czas (w sekundach) i następnie wznowi wątek na następnym kroku Heartbeat.
Czas rzeczywistego zbioru może się różnić. Poniższy przykład kodu pokazuje, jak ta metoda zwraca go dla wygody:
Ponieważ czas opóźnienia rzeczywisty może się różnić, poniższy przykład kodu pokazuje, jak możesz uzyskać rzeczywisty czas, przechowując wartość zwrotną metody:
local elapsedTime = task.wait(2) -- czekaj 2 sekundprint(elapsedTime) --> 2.0792941
Jeśli nie podano żadnego czasu trwania, czas trwania zostanie domyślnie ustawiony na zero, co oznacza, że wątek zostanie automatycznie wznowiony na następnym kroku.Oznacza to, że task.wait() jest równoznaczny w zachowaniu z RunService.Heartbeat .