Programar código es útil en muchas situaciones, como asegurarse de que el código se ejecute después de que se haya completado una acción o ciclo específico, o retrasar el código durante un período de tiempo específico. Puedes usar la biblioteca task para optimizar el programador de tareas de Roblox para gestionar y programar código. También puedes usar una biblioteca similar llamada coroutine para programar el código que tiene algo de funcionalidad adicional.
Métodos comunes
Los siguientes son los métodos más comunes de task utilizados para programar código. Debes usar los métodos de tareas en lugar de los métodos de programación heredados, como wait(), para asegurarte de que tu código se ejecute de manera óptima.
La siguiente tabla lista los métodos globales heredados relevantes y sus contrapartes preferidas y más optimizadas:
| Métodos globales heredados | Métodos de tarea | Alternativas adicionales |
|---|---|---|
| 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() toma un hilo o función y lo reanuda inmediatamente a través del programador del motor. Se pasan argumentos adicionales al hilo o función que se está reanudando.
El siguiente ejemplo de código es un ejemplo de cómo puedes usar task.spawn() al llamar a una función que puede ceder mientras itera sobre un conjunto de objetos:
local function playerAdded(player)
print(player)
end
for _, player in Players:GetPlayers() do
task.spawn(playerAdded, player)
end
task.defer()
task.defer() toma un hilo o función y lo pospone hasta el final del punto de reanudación actual dentro del cuadro actual. Se pasan argumentos adicionales al hilo o función que se reanuda.
Debes usar esto típicamente cuando quieres un comportamiento similar al de task.spawn() pero no te importa que el hilo se ejecute inmediatamente. El siguiente ejemplo de código ilustra cómo la declaración print() para "A" se pospondrá hasta después de que se ejecute la declaración print() para "B":
task.defer(print, "A")print("B")--> B--> A
task.delay()
task.delay() toma un hilo o función y lo programa para su reanudación después de que transcurra el tiempo dado en el siguiente paso Heartbeat. El hilo se reanuda con manejo de errores incorporado y soporte para otras características del motor. Cualquier argumento adicional se pasa al hilo o función que se reanuda.
Dado que el tiempo de retardo real puede variar, el siguiente ejemplo de código ilustra cómo puedes calcularlo pasando el tiempo actual como argumento:
task.delay(2, function(scheduledTime)
print(os.clock() - scheduledTime) --> 2.038702
end, os.clock())
Una duración de cero resultará en que el hilo o función se reanude en el siguiente paso.
task.wait()
task.wait() cede el hilo actual hasta que transcurra la duración dada (en segundos) y luego reanuda el hilo en el siguiente paso Heartbeat.
El tiempo de espera real puede variar. El siguiente ejemplo de código ilustra cómo este método devuelve el tiempo para conveniencia:
Dado que el tiempo de retardo real puede variar, el siguiente ejemplo de código ilustra cómo puedes obtener el tiempo real almacenando el valor de retorno del método:
local elapsedTime = task.wait(2) -- Espera 2 segundosprint(elapsedTime) --> 2.0792941
Si no se da una duración, la duración se establecerá en cero, lo que significa que el hilo se reanudará automáticamente en el siguiente paso. Esto significa que task.wait() es equivalente en comportamiento a RunService.Heartbeat.