Bueno, sé que esta publicación es bastante antigua, pero no pude resistirme.
Recientemente construí un motor de juego. Utiliza bibliotecas de fiestas en 3D para renderizar y física, pero escribí la parte central, que define y procesa las entidades y la lógica del juego.
El motor seguramente sigue un enfoque tradicional. Hay un ciclo de actualización principal que llama a la función de actualización para todas las entidades. Las colisiones se informan directamente por devolución de llamada en las entidades. Las comunicaciones entre entidades se realizan utilizando punteros inteligentes intercambiados entre entidades.
Hay un sistema de mensajes primitivo, que procesa solo un pequeño grupo de entidades para generar mensajes. Es preferible que esos mensajes se procesen al final de una interacción del juego (por ejemplo, la creación o destrucción de una entidad) porque pueden interferir con la lista de actualizaciones. Entonces, al final de cada ciclo del juego, se consume una pequeña lista de mensajes.
A pesar del sistema de mensajes primitivo, diría que el sistema está en gran medida "basado en bucles de actualización".
Bien. Después de usar este sistema, creo que es muy simple, rápido y bien organizado. La lógica del juego es visible y autónoma dentro de las entidades, no dinámica como un mensaje quewe. Realmente no lo haría impulsado por eventos porque, en mi opinión, los sistemas de eventos introducen una complejidad innecesaria en la lógica del juego y hacen que el código del juego sea muy difícil de entender y depurar.
Pero también creo que un sistema puro "basado en bucles de actualización" como el mío también tiene algunos problemas.
Por ejemplo, en algunos momentos, una entidad puede estar en un "estado de no hacer nada", puede estar esperando que el jugador se acerque o algo más. En la mayoría de esos casos, la entidad quema el tiempo del procesador por nada y es mejor apagar la entidad y encenderla cuando ocurre un determinado evento.
Entonces, en mi próximo motor de juego, voy a adoptar un enfoque diferente. Las entidades se registrarán para las operaciones del motor, como actualizaciones, dibujos, detección de colisiones, etc. Cada uno de estos eventos tendrá listas separadas de interfaces de entidad para las entidades reales.