Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Opinión sobre como organizar los eventos del juego.

Iniciado por Tizon, Abril 25, 2016, 08:08:51 PM

Tema anterior - Siguiente tema
Bien, para dar una idea, imaginemos que es un juego de estrategía y que ha de lanzar unos eventos periódicos, imaginemos por ejemplo, cada mes, cobrar los impuestos, pagar las nóminas de funcionarios, incorporación de reclutas a filas, incrementos de población, etc.Tengo hecho un timer y un Objeto que es un director de juego, que se encarga de crear las nuevas entidades según conviene, y meterlos en colecciones para tenerlos controlados y esas cosas. Lo tengo resuelto de tal forma que cuando se cumple un mes en el timer, ataca una función del director del juego la cual se encarga de recorrer uno por uno todos los elementos de las colecciones (forearch) y ejecutar a su vez las funciones de "fin de mes" para que cada uno de los pueblos paguen los impuestos, recluten los reclutas, paguen a los funcionarios, incrementen población, etc... y va bien. Ahora, trato más de aprender que no que las cosas funcionen (Aunque cuando lo hacen es un gusto, jejejejeje...) y aún me faltan muchos conceptos por asimilar, así que mi pregunta para el foro es... Se os ocurre un método mejor de hacerlo? Más eficiente? O podríamos decir que el que empleo es el más óptimo para este propósito?Nuevamente muchas gracias a todos.

necesitas una agenda... guardas la fecha y hora cuando va a ocurrir un evento y la accion a ejecutar... por ejemplo presiono el boton de lanzar cohete, el juego guarda en la agenda q en una semana, 3 horas y 5 minutos va a llegar a su destino... cuando se ejecuta el juego mira todos los eventos que han sucedido hasta la fecha y ejecuta sus acciones en orden, como hacer explotar el planeta donde llego el cohete. puedes usar una lista o una base de datos puede ser mas eficiente

También supongo que tendrás que definir dependencias en los eventos. Es decir, no puedes pagar a los funcionarios sino has cobrado los impuestos.O sea, aparte de la fecha, un orden dentro de las acciones.

Abril 26, 2016, 05:19:40 PM #3 Ultima modificación: Abril 26, 2016, 05:20:09 PM por Tizon
Cita de: iRobb date=1461633494" data-ipsquote="" data-cite="iRobbTambién supongo que tendrás que definir dependencias en los eventos. Es decir, no puedes pagar a los funcionarios sino has cobrado los impuestos.O sea, aparte de la fecha, un orden dentro de las acciones.
Muchas gracias. Evidentemente si, hay que establecer un orden.Lo siento, ahora viéndolo veo que el título del hilo ya sugiere la respuesta y desvía la cuestión que quería preguntar.Esto viene a ser, teniendo controlado el momento en que se ha de "disparar" las acciones, teniendo en cuenta que afectan a varios tipos de clases diferentes y que tienes todos los elementos controlados por listas, que creéis que es más eficiente, un buce ForEach en las listas que invoque a todas las funciones de los objetos para que chequeen, eventos tal cual, o bien algún otro tipo de implementación.Disculpas a todos por mi poca claridad al formular la pregunta y muchas gracias. 

Vale. Tienes la implementación que comentas, que no deja de ser una cola de mensajes o la versión push, por definirla de alguna manera, que sería que cuando una clase necesita realizar algo (entiendo que no siempre) lanza un evento al proceso central. Si todas clases siempre deben realizar un evento periódicamente, la primera es la más lógica. Si esto se comporta como un gestor de estados finitos iría por la segunda.

Estaría genial encontrar alguna forma estándar de devolver un mensaje/notificación a algún Gameobject , conforme el evento acaba de ocurrir. Lo comento porque yo tengo mi propio sistema de timers y lo más difícil es encontrar la forma 'más eficiente' de devolver la activación de un evento sin que impacte demasiado.

Es un tema muy interesante y práctico, porqué al inicio de la curva de aprendizaje crees que no lo vas a necesitar, y al final acabas con un montón de componentes dispersos sin orden.El mío lo he hecho en base a un bucle que consulta un hash (es muy sencillo de crear). El componente define el hash, que es lo que le identifica en caso de cambio. No utilizo timers y el 90% de mi código son coroutines, desde el inicio.

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35733" data-ipsquote-contentcommentid="130253 date=1461718454]Es un tema muy interesante y práctico, porqué al inicio de la curva de aprendizaje crees que no lo vas a necesitar, y al final acabas con un montón de componentes dispersos sin orden.El mío lo he hecho en base a un bucle que consulta un hash (es muy sencillo de crear). El componente define el hash, que es lo que le identifica en caso de cambio. No utilizo timers y el 90% de mi código son coroutines, desde el inicio.[/quote]Suena interesante. Podrías dar más detalles así a nivel de concepto? Qué diferencia habría con la suscripción a un evento? Perdón si es pregunta de novato, eh? pero es que muchos de estos conceptos aún son nuevos para mí. 

Etiquetas: