Creo que he decidido que realmente me gustan los controladores de eventos. Puede que esté sufriendo un poco de parálisis de análisis, pero me preocupa hacer que mi diseño sea difícil de manejar o tener alguna otra consecuencia imprevista de mis decisiones de diseño.
Mi motor de juego actualmente realiza renderizado básico basado en sprites con una cámara panorámica panorámica. Mi diseño se parece un poco a esto:
SceneHandler
Contiene una lista de clases que implementan la interfaz SceneListener (actualmente solo Sprites). Llama a render () una vez por tick y envía onCameraUpdate (); mensajes a SceneListeners.
InputHandler
Sondea la entrada una vez por marca y envía un mensaje simple "onKeyPressed" a InputListeners. Tengo un Camera InputListener que contiene una instancia de SceneHandler y desencadena updateCamera (); eventos basados en lo que es la entrada.
AgentHandler
Invoca acciones predeterminadas en cualquier Agente (AI) una vez por tick, y verificará una pila de nuevos eventos que estén registrados, enviándolos a Agentes específicos según sea necesario.
Así que tengo objetos sprite básicos que pueden moverse por una escena y usar comportamientos de dirección rudimentarios para viajar. Llegué a la detección de colisión, y aquí es donde no estoy seguro de que la dirección de mi diseño sea buena. ¿Es una buena práctica tener muchos controladores de eventos pequeños? Me imagino que, tal como soy, tendría que implementar algún tipo de CollisionHandler.
¿Estaría mejor con un EntityHandler más consolidado que maneja AI, actualizaciones de colisión y otras interacciones de entidad en una clase? ¿O estaré bien simplemente implementando muchos subsistemas de manejo de eventos diferentes que se transmiten mensajes entre sí en función de qué tipo de evento es? ¿Debo escribir un EntityHandler que simplemente sea responsable de coordinar todos estos controladores de eventos secundarios?
Me doy cuenta de que en algunos casos, como mi InputHandler y SceneHandler, esos son tipos de eventos muy específicos. Una gran parte de mi código de juego no se preocupará por la entrada, y una gran parte no se preocupará por las actualizaciones que ocurren puramente en la representación de la escena. Por lo tanto, siento que mi aislamiento de esos sistemas está justificado. Sin embargo, estoy haciendo esta pregunta específicamente acerca de los eventos de tipo de lógica de juego.