Kod harmonogramu

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Harmonogramowanie kodu jest przydatne 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ć harmonogramowanie zadań w Robloxie w celu zarządzania i planowania kodu. Możesz również użyć podobnej biblioteki o nazwie coroutine, aby zaplanować kod, który ma dodatkowe funkcje.

Najczęstsze metody

Poniżej znajdują się najczęstsze metody task używane do harmonogramowania kodu. Należy używać metod zadań zamiast przestarzałych metod harmonogramowania, takich jak wait(), aby zapewnić optymalne działanie kodu.

Poniższa tabela przedstawia odpowiednie przestarzałe globalne metody i ich preferowane, bardziej zoptymalizowane odpowiedniki:

Przestarzałe globalne metodyMetody zadańDodatkowe alternatywy
wait()task.wait()RunService.Heartbeat
wait(n)task.wait(n)
spawn(f)task.defer(f)task.delay(0, f)
delay(n, f)task.delay(n, f)
spawn(function() f(uv1, ...) end)task.defer(f, uv1, ...)task.delay(0, f, uv1, ...)
delay(n, function() f(uv1, ...) end)task.delay(n, f, uv1, ...)

task.spawn()

task.spawn() przyjmuje wątek lub funkcję i wznawia go natychmiastowo za pomocą harmonogramu silnika. Dodatkowe argumenty są przekazywane do wątku lub funkcji, która jest wznawiana.

Poniższy przykład kodu ilustruje, jak możesz użyć task.spawn(), gdy wywołujesz funkcję, która może powodować przejrzystość podczas iteracji przez zestaw obiektów:


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

task.defer()

task.defer() przyjmuje wątek lub funkcję i odkłada go do końca aktualnego punktu wznowienia w danej klatce. Dodatkowe argumenty są przekazywane do wątku lub funkcji wznawianej.

Zwykle powinieneś używać tego, gdy chcesz uzyskać zachowanie podobne do task.spawn(), ale nie zależy ci na natychmiastowym uruchomieniu wątku. Poniższy przykład kodu ilustruje, jak polecenie print() dla "A" zostanie odłożone do momentu, aż polecenie print() dla "B" zostanie wykonane:


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

task.delay()

task.delay() przyjmuje wątek lub funkcję i harmonogramuje go do wznowienia po upływie zadanego czasu na następny krok Heartbeat. Wątek wznawia się z wbudowanym obsługiwaniem błędów i wsparciem dla innych funkcji silnika. Wszelkie dodatkowe argumenty są przekazywane do wątku lub funkcji wznawianej.

Ponieważ rzeczywisty czas opóźnienia może się różnić, poniższy przykład kodu ilustruje, jak możesz go obliczyć, przekazując aktualny czas jako argument:


task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())

Okres wynoszący zero spowoduje, że wątek lub funkcja wznowi się w następnym kroku.

task.wait()

task.wait() wstrzymuje bieżący wątek, aż upłynie zadany czas (w sekundach), a następnie wznowi wątek w następnym kroku Heartbeat.

Rzeczywisty czas oczekiwania może się różnić. Poniższy przykład kodu ilustruje, jak ta metoda zwraca go dla wygody:

Ponieważ rzeczywisty czas opóźnienia może się różnić, poniższy przykład kodu ilustruje, jak możesz uzyskać rzeczywisty czas, przechowując wartość zwracaną przez metodę:


local elapsedTime = task.wait(2) -- Czekaj 2 sekundy
print(elapsedTime) --> 2.0792941

Jeśli nie podano czasu trwania, czas domyślny wyniesie zero, co oznacza, że wątek automatycznie wznowi się w następnym kroku. Oznacza to, że task.wait() jest równoważne w zachowaniu z RunService.Heartbeat.

©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.