Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: TheMurddock en Diciembre 22, 2015, 06:22:48 AM

Título: IEnumerator Vs Invoke
Publicado por: TheMurddock en Diciembre 22, 2015, 06:22:48 AM
Hola a todos, tengo dudas de la utilidad de IEnumerator , cuando podría hacer algo como  invoke( metodo, tiempo ).Se que sera una duda tonta, pero de verdad no entiendo. jajaja
Título: IEnumerator Vs Invoke
Publicado por: Braltor en Diciembre 22, 2015, 07:26:24 AM
ienumerator es lo que devuelve una función que corre en otro hilo, invoke es como un reloj que corre una función en cierto tiempo
Título: IEnumerator Vs Invoke
Publicado por: TheMurddock en Diciembre 22, 2015, 07:32:25 AM
:/ no te entiendo, vendria a funcionar IEnumerator como un "set" ¿mas o menos?, :C ¿podrías darme un ejemplo? 

( :3 Gracias por responder) 
Título: IEnumerator Vs Invoke
Publicado por: Braltor en Diciembre 22, 2015, 07:34:20 AM
es como un registro que guarda el estado del método
Título: IEnumerator Vs Invoke
Publicado por: TheMurddock en Diciembre 23, 2015, 01:29:19 AM
veamos...

he visto que lo usan de esta manera.
 
void Start() {
     StartCoroutine(Ejemplo(3f));
}

IEnumerator Ejemplo (float tiempo ) {
     yield return new WaitForSeconds(tiempo);
     Debug.Log ("pasaron 3 segundos");
}
No entiendo.. que diferencia hay de hacer eso con hacer algo como :
 
void Start () {
    Invoke ("Ejemplo", 3f);
}

void Ejemplo () {
  Debug.Log ("pasaron 3 segundos");

}


Algo me dice que estoy entendiendo el IEnumerator mal.. jajaja. :C
Título: IEnumerator Vs Invoke
Publicado por: Braltor en Diciembre 23, 2015, 01:37:53 AM
por qué tendría que haber diferencia? en programación hay montones de formas de hacer la misma cosa, nada mas elige la que te guste
Título: IEnumerator Vs Invoke
Publicado por: TheMurddock en Diciembre 23, 2015, 01:42:38 AM
Pero dices que actua como un registro, ¿de que manera actua como un registro? 
Título: IEnumerator Vs Invoke
Publicado por: Braltor en Diciembre 23, 2015, 02:04:22 AM
o sea el ienumerator guarda el estado de la corutina, así unity la puede continuar despues cuando se cumple cierta condicion como el paso del tiempo que pidas... la corrutina es una funcion que se puede pausar y el ienumerator es el registro que guarda su estado (variables locales, pila...)
Título: IEnumerator Vs Invoke
Publicado por: TheMurddock en Diciembre 23, 2015, 04:42:31 AM
Vale creo que empiezo a entenderlo un poco mas  Gracias
Título: IEnumerator Vs Invoke
Publicado por: Quel en Diciembre 23, 2015, 09:44:52 AM
Un Invoke es como la versión simple y cutre de un IEnumerator.Si lo único que necesitas es ejecutar una función con un retraso de X tiempo, puedes usar un Invoke y te quedas con pancho. Pero si necesitas mayor control del tiempo sobre una función, entonces el Invoke se queda corto y tienes que tirar de IEnumerator.Por ponerte un ejemplo. Imagina que tienes una función. Que quiero que muestre un mensaje por pantalla. Luego espere 2 segundos. Muestre otro mensaje. Después espere que pulse una tecla. Si la tecla es la letra Y, se acaba. Si la tecla es la letra N, vuelve a mostrar el segundo mensaje y se vuelve a quedar a la espera.Algo como eso, con un IEnumerator es fácil. Hacerlo usando Invokes puede ser ... imposible.
Título: IEnumerator Vs Invoke
Publicado por: pioj en Diciembre 23, 2015, 10:53:37 AM
La gente te está tratando de explicar que son cosas distintas.  Invoke es una llamada aleatoria a una función y que se ejecutará tras un tiempo dado como argumento.IEnumerator es un tipo de función que puede o no devolver un valor, y que su principal característica es que es Asíncrono. Se ejecutará y devolverá el valor cuando él pueda o encuentre un momento libre de trabajo. Las tareas asíncronas suelen usarse en cosas como Colas de trabajo (queues), colisiones poco importantes, rutinas en 2º plano, y en general para gestionar todos esos trabajos del juego que no son TAN importantes ni necesarios en un momento determinado, pero que quieras que se acaben haciendo sí o sí.Por ejemplo, el envío de mensajes de red en juegos multiplayer, cuando tu mandas o recibes paquetes. Eso suele usar llamadas asíncronas, para no colapsar la red. Recordad también que en Videojuegos, los Cálculos matemáticos de coordenadas/vectores para colisiones, las condiciones que varían la Lógica del juego, y las decisiones de una acción u otra, son siempre de 1er Orden, o cosas MÁS importantes, que no otras (cambiar el fondo de pantalla, cargar un nivel, cambiar el valor a un texto de la GUI, etc son ejemplos de cosas MENOS importantes para el juego y por tanto puedes usar métodos asíncronos en ellos, y permitirte el lujo de liberar unos pocos milisegundos.) 
Título: IEnumerator Vs Invoke
Publicado por: TheMurddock en Diciembre 23, 2015, 10:00:05 PM
Muchas gracias a los 3  ahora si tengo muchisimo mas claro esto.

De verdad mil y mil gracias :3