Je suppose que j'ai décidé que j'aime vraiment les gestionnaires d'événements. Je souffre peut-être un peu de paralysie de l'analyse, mais je crains de rendre ma conception lourde ou de rencontrer d'autres conséquences imprévues pour mes décisions de conception.
Mon moteur de jeu fait actuellement un rendu de base basé sur les sprites avec une caméra panoramique. Ma conception ressemble un peu à ceci:
SceneHandler
Contient une liste de classes qui implémentent l'interface SceneListener (actuellement uniquement des Sprites). Appelle render () une fois par tick et envoie onCameraUpdate (); messages à SceneListeners.
InputHandler
Interroge l'entrée une fois par tick et envoie un simple message "onKeyPressed" aux InputListeners. J'ai un Camera InputListener qui contient une instance SceneHandler et déclenche updateCamera (); événements en fonction de ce que l'entrée est.
AgentHandler
Appelle les actions par défaut sur tous les agents (AI) une fois par tick, et vérifiera une pile pour tout nouvel événement enregistré, en les envoyant à des agents spécifiques si nécessaire.
J'ai donc des objets sprite de base qui peuvent se déplacer dans une scène et utiliser des comportements de pilotage rudimentaires pour voyager. Je suis passé à la détection des collisions, et c'est là que je ne suis pas sûr que la direction que prend ma conception soit bonne. Est-ce une bonne pratique d'avoir de nombreux petits gestionnaires d'événements? J'imagine que je suis comme ça que je devrais implémenter une sorte de CollisionHandler.
Serais-je mieux avec un EntityHandler plus consolidé qui gère l'IA, les mises à jour de collision et d'autres interactions d'entité dans une classe? Ou vais-je bien mettre en œuvre de nombreux sous-systèmes de gestion d'événements différents qui se transmettent des messages en fonction du type d'événement? Dois-je écrire un EntityHandler qui est simplement responsable de la coordination de tous ces gestionnaires d'événements secondaires?
Je me rends compte que dans certains cas, comme mes InputHandler et SceneHandler, ce sont des types d'événements très spécifiques. Une grande partie de mon code de jeu ne se souciera pas de la saisie, et une grande partie ne se souciera pas des mises à jour qui se produisent uniquement dans le rendu de la scène. Je pense donc que mon isolement de ces systèmes est justifié. Cependant, je pose cette question en abordant spécifiquement les événements de type logique de jeu.