Eh bien, je sais que ce message est assez ancien, mais je ne pouvais pas résister.
J'ai récemment construit un moteur de jeu. Il utilise des bibliothèques 3D pour le rendu et la physique, mais j’ai écrit la partie principale, qui définit et traite les entités et la logique du jeu.
Le moteur suit sûrement une approche traditionnelle. Il existe une boucle principale de mise à jour qui appelle la fonction de mise à jour pour toutes les entités. Les collisions sont directement signalées par rappel sur les entités. Les communications entre entités sont établies à l'aide de pointeurs intelligents échangés entre entités.
Il existe un système de messagerie primitif, qui ne traite qu'un petit groupe d'entités pour alimenter les messages. Il est préférable que ces messages soient traités à la fin d'une interaction de jeu (par exemple, la création ou la destruction d'une entité), car ils peuvent perturber la liste de mises à jour. Ainsi, à la fin de chaque boucle de jeu, une petite liste de messages est consommée.
Malgré le système de messagerie primitif, je dirais que le système est en grande partie "basé sur une boucle de mise à jour".
Bien. Après avoir utilisé ce système, je pense qu’il est très simple, rapide et bien organisé. La logique du jeu est visible et autonome dans les entités, pas dynamique comme un message quewe. Je ne voudrais vraiment pas que les événements soient axés sur les événements car, à mon avis, les systèmes d'événements introduisent une complexité inutile dans la logique du jeu et rendent le code du jeu très difficile à comprendre et à déboguer.
Mais, je pense aussi qu’un système pur "basé sur la boucle de mise à jour" comme le mien a aussi des problèmes.
Par exemple, à certains moments, une entité peut être dans un état "ne rien faire", peut attendre que le joueur s'approche ou quelque chose d'autre. Dans la plupart des cas, l'entité consomme le temps processeur pour rien et il est préférable de la désactiver, et de l'activer lorsqu'un certain événement se produit.
Donc, dans mon prochain moteur de jeu, je vais adopter une approche différente. Les entités s'enregistrent pour les opérations du moteur, telles que la mise à jour, le dessin, la détection de collision, etc. Chacun de ces événements aura des listes d'interfaces d'entités séparées pour les entités réelles.