Kod harmonizacji jest przydatny w wielu sytuacjach, takich jak zapewnienie, że kod zostanie wykonany po zakończeniu określonej akcji lub cyklu, lub opóźnienie kodu na określony czas. Możesz użyć biblioteki task, aby zoptymalizować Kalendarz zadań Roblox,
Zwykłe metody
Najczęściej używane są następujące metody task używane do rozplanowania kodu. Powinieneś używać metod zadań nad metodami zaplanowania w dziedzictwie, takimi jak wait(), aby upewnić się, że twój kod biegnie prawidłowo.
Poniższy tabela wymienia odpowiednie globalne metody dziedzictwa i ich preferowane, bardziej zoptymalizowane odpowiedniki:
| Metody Globalne Dziedzictwa | Metody Zadania | | Dostępne alternatywy | | | : | : | | | : | : | | | : | : | | | : | : | | | : | : | | | : | : | | | : | : | | | : | : | | | : | : | | | :
zadanie.spawn
task.spawn() wymaga wątku lub funkcji i ponownie ją natychmiastowo poprzez kalendarz silnika. Dostarczane są dodatkowe argumenty dla wątku lub funkcji, które ponownie są ponowione.
Poniższy kod przyjścia jest przykładem tego, jak można użyć task.spawn() podczas wzywania funkcji, która może zostać wykonana podczas przetwarzania zbioru obiektów:
local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
zadanie.延遲
task.defer() wziąć wątek lub funkcję i odrzuca go do następnego cyklu zatrzymania w którym następnie zostanie ponownie uruchomiony z kalendarzem silnika. Dostarczane są dodatkowe argumenty do wątku lub funkcji zatrzymania.
Powinieneś użyć tego, gdy chcesz podobnego zachowania do task.spawn() , ale nie obchodzi cię natychmiastowe uruchomienie wątku. Poniższy przykład kodu pokazuje, jak print() stwierdzenie dla "A" będzie odkładać do czasu po wykonaniu 1> print()
task.defer(print, "A")print("B")--> B--> A
ale laguje
task.delay() wymaga wątku lub funkcji i zaplanowuje go na resumę po upływie danej ilości czasu Heartbeat kroku. Wątek zostanie wznowiony z zintegrowaną obsługą błędów i wsparciem dla innych funkcji silnika. Wszystkie dodatkowe argumenty są przekazywane wątkowi lub funkcji.
Ponieważ czas opóźnienia rzeczywisty może się różnić, poniższy przykład kodu pokazuje, jak można go obliczyć poprzez przekazanie obecnego czasu jako argumentu:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Okres zero wyniesie wątek lub funkcję w następnym kroku.
czekaj
task.wait() wygrywa bieżący wątek do czasu określonego (w sekundach) i następnie kontynuuje wątek na następnym kroku Heartbeat.
Czas zbierania rzeczywisty może się różnić. Poniższy przykładowy kod pokazuje, jak ten metodowy powoduje to dla wygody:
Ponieważ czas opóźnienia rzeczywistego może się różnić, poniższy przykład kodu pokazuje, jak można uzyskać rzeczywisty czas poprzez przechowywanie wartości zwrotu metody:
local elapsedTime = task.wait(2) -- czekaj 2 sekundyprint(elapsedTime) --> 2.0792941
Jeśli określona jest żadna długość, to określona jest domyślna długość, co oznacza, że wątek zostanie automatycznie ponownie uruchomiony na następnym kroku. Oznacza to, że task.wait() jest równoznaczne z RunService.Heartbeat .