Il codice di programmazione è utile in molte situazioni, come garantire l'esecuzione del codice dopo che un'azione o un ciclo specifico è completato o ritardare il codice per un periodo di tempo specifico.Puoi usare la libreria task per ottimizzare il programmatore di compiti di Roblox per gestire e programmare il codice.Puoi anche utilizzare una libreria simile chiamata coroutine per programmare il codice che ha alcune funzionalità aggiuntive.
Metodi comuni
I seguenti sono i metodi più comuni task utilizzati per programmare il codice.Dovresti utilizzare i metodi di attività su metodi di programmazione legacy, come wait(), per garantire che il tuo codice venga eseguito ottimamente.
La seguente tabella elenca i metodi globali legacy pertinenti e le loro controparti preferite e più ottimizzate:
| Metodi globali legacy | Metodi di attività | Alternative aggiuntive | | :-------------------------------------- | :------------------------------------------------- | :------------------------------------------------- | | 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, ...) |
task.rigenerare
task.spawn() prende un thread o una funzione e la riprende immediatamente attraverso il Agendadell'engine.Gli argomenti aggiuntivi vengono passati al thread o alla funzione che viene ripresa.
Il seguente esempio di codice è un esempio di come puoi usare task.spawn() quando chiami una funzione che può produrre mentre si itera su un insieme di oggetti:
local function playerAdded(player)
...
(yield)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
task.defer
task.defer() prende un thread o una funzione e la rinvia fino al prossimo ciclo di ripresa a cui punto viene ripresa con il Agendadell'engine.Gli argomenti aggiuntivi vengono passati al thread o alla funzione di ripresa.
Di solito dovresti usare questo quando vuoi un comportamento simile a task.spawn() ma non ti interessa il thread in esecuzione immediatamente.Il seguente esempio di codice illustra come la dichiarazione print() per "A" verrà rinviata fino a quando la dichiarazione print() per "B" non verrà eseguita:
task.defer(print, "A")print("B")--> B--> A
task.delay
task.delay() prende un thread o una funzione e lo programma per il riavvio dopo l'ammontare di tempo dato sul prossimo passo Heartbeat.Il thread riprende con la gestione e il supporto degli errori integrati e delle altre funzionalità del motore.Gli argomenti aggiuntivi vengono passati al thread o alla funzione di ripresa.
Poiché il tempo effettivo di ritardo può variare, il seguente esempio di codice illustra come puoi calcolarlo passando il tempo attuale come argomento:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Una durata di zero farà riprendere il thread o la funzione al prossimo passo.
task.wait
task.wait() rende il thread attuale fino alla durata indicata (in secondi) e poi riprende il thread al prossimo passo Heartbeat.
Il tempo effettivo di raccolta può variare. Il seguente esempio di codice illustra come questo metodo lo restituisca per comodità:
Poiché il tempo effettivo di ritardo può variare, il seguente esempio di codice illustra come puoi ottenere il tempo effettivo memorizzando il valore di ritorno del metodo:
local elapsedTime = task.wait(2) -- aspetta 2 secondiprint(elapsedTime) --> 2.0792941
Se non viene indicata alcuna durata, la durata predefinita sarà zero, il che significa che il thread riprenderà automaticamente al prossimo passo.Questo significa che task.wait() è equivalente in comportamento a RunService.Heartbeat .