Tutorial de Coroutines

tutorials
scripting
español

#1

He visto que este tema es muy confuso para aquellos que quieren aprender de esto, y decidí hacer un tutorial en español.
Ahora tal vez te estarás preguntando, ¿Qué es una coroutine?. Las coroutines son como programas apartes. Esto nos da la habilidad hacer menor uso de instance scripts (nuevos programas objs). Por ejemplo.
Hacer dos bucles, uno arriba, otro abajo. Por lo que verás, el bucle de abajo no esperara a que el de arriba termine, interesante, ¿no?.

Explicando algunos argumentos de coroutine:

Creando nuestra coroutine:

Primero tenemos el argumento principal coroutine.create() ;

¿Cómo funciona este argumento de coroutine?, lo que hace es crear una función, en este caso yo pondré un for loop de prueba.
Ejemplo;

local MiPrimerCoroutine = coroutine.create(function() --Creando una coroutine
for Numero = 1, 5 do
      print("Este es el primero ", Numero)
      wait(1)
     end
end)

Por lo que verás, aún no hace nada, eso es por que aún no la activamos.

Haciendo arrancar nuestra coroutine:

Activamos la función con coroutine.resume() , con esto estamos resumiendo la coroutine que acabamos de crear y comenzará a dar vida tu coroutine.
Podemos darle vida de la siguiente manera;

local MiPrimerCoroutine = coroutine.create(function() --Creando una coroutine
for Numero = 1, 5 do
      print("Este es el primero ", Numero)
      wait(1)
     end
end)
coroutine.resume(MiPrimerCoroutine) --Primer parámetro nombre de la variable con la función

Cuando resumimos nuestra coroutine empiezan a correr las líneas de nuestra función.

Obteniendo status de nuestra coroutine:

¿Quieres saber el estado actual de tu coroutine?, entonces podemos usar el siguiente argumento; coroutine.status(). Lo que hace este argumento de coroutine es enviarnos un string value (un texto) el cual nos dice el estado en el que está la coroutine que creamos.
Ejemplo;

local MiPrimerCoroutine = coroutine.create(function() --Creando una coroutine
for Numero = 1, 5 do
      print("Este es el primero ", Numero)
      wait(1)
     end
end)

print(coroutine.status("El estado de nuestra Coroutine es ", MiPrimerCoroutine)) --Primer parámetro nombre de la variable con la función, el estado que mostrará será igual a "suspended"
coroutine.resume(MiPrimerCoroutine) --Primer parámetro nombre de la variable con la función
wait(5)
print(coroutine.status("El estado de nuestra Coroutine es ", MiPrimerCoroutine)) --Primer parámetro nombre de la variable con la función, el estado que mostrará será igual a "dead"

Las coroutines te serán muy útiles, te recomiendo usarlas si estás haciendo un programa con bucles los cuales no quieres que sean interrumpidos por nada lo que pase.
Ejemplo;

local MiPrimerCoroutine = coroutine.create(function() --Creando una coroutine
for Numero = 1, 5 do
      print("Este es el primero ", Numero)
      wait(1)
     end
end)

local MiSegundaCoroutine = coroutine.create(function() --Creando una coroutine
for Numero = 1, 5 do
      print("Este es el segundo ", Numero)
      wait(1)
     end
end)

coroutine.resume(MiPrimerCoroutine) --Primer parámetro nombre de la variable con la función
coroutine.resume(MiSegundaCoroutine) --Primer parámetro nombre de la variable con la función

Cuando tenga más tiempo seguiré agregando más datos de esta maravillosa función.


#2

Gracias por el tutorial


#3

Gracias por el tutorial, yo siempre como sustituto de de coroutines, opto por poner otro script aparte y ejecutarlo haciéndolo pasar del Disabled=true a Disabled=false.
Sé que son totalmente diferentes, pero a pesar de eso ¿No sabes si hay alguna diferencia en rendimiento y optimización entre los coroutines y este método que utilizo?


#4

En cuanto a optimización, creo que el método que usas es un poco mejor que usar el Coroutine, como verás, el método Disabled se tarda 0.0323, en cambio, el método de Coroutine se tarda 0.0324, diferencia de 0.00015.
image


#5

gracias :heart:


#6

es chidos el tutorial lo recomiendo


#7

Gracias es muy util