He estado dando vueltas con los fundamentos de un motor de juegos Java, y he llegado al punto en el que estoy listo para agregar un sistema Event Manager.
Sé, en teoría , lo que debe hacer un administrador de eventos: permitir que los objetos se "registren" para ciertos eventos, y cada vez que el administrador de eventos recibe una notificación de un evento, transmite el evento a los oyentes "registrados". Lo que me sorprende es cómo comenzar a implementarlo.
No he podido encontrar nada, en línea, sobre la implementación de un sistema de eventos desde cero, por lo que estoy buscando información sobre cuáles son las mejores prácticas en este caso: qué debo y qué no debo hacer.
Por ejemplo, ¿es realmente necesario que cada uno de mis objetos del juego tenga un EventManager
campo? Como todos mis objetos de juego heredan de una sola clase principal abstracta, creo que debería poder usar una referencia estática para que solo haya una instancia del Administrador de eventos, compartida entre todos los objetos del juego. Hago algo similar, con el Applet, que ya uso para renderizar cada objeto.
Supongo que tendría que mantener una colección de algún tipo para cada posible evento suscrito, agregando y eliminando objetos del juego de la lista, según sea necesario. Creo que debería ser posible hacer una cola de eventos que necesitan ser transmitidos, en cuyo caso simplemente podría agregar "EventManager.Update ()" al ciclo principal del juego, y hacer que el Update()
método transmita los eventos que ocurrieron al final de cada cuadro. Finalmente, cada objeto tendría un HandleEvent(Event e)
método, que luego podrían analizar y responder adecuadamente.
¿Suena esto como la dirección adecuada hacia la implementación de dicho sistema, o me estoy desviando y / o me estoy perdiendo algo bastante obvio?