Les machines à états semblent provoquer des dépendances nuisibles dans les architectures basées sur les composants.
Comment, en particulier, la communication est-elle gérée entre une machine d'état et les composants qui exécutent un comportement lié à l'état?
Où je suis:
- Je suis nouveau dans les architectures basées sur les composants.
- Je fais un jeu de combat, même si je ne pense pas que cela devrait avoir d'importance. J'imagine que ma machine à états est utilisée pour basculer des états comme "accroupi", "fringant", "bloquant", etc.
- J'ai trouvé que cette technique de gestion d'état est le système le plus naturel pour une architecture basée sur des composants, mais elle entre en conflit avec les techniques que j'ai lues: Système de composants d'objet de jeu dynamique pour les personnages à comportement mutable Il suggère que tous les composants s'activent / se désactivent eux-mêmes en vérifiant continuellement une condition d'activation.
- Je pense que des actions comme "courir" ou "marcher" ont un sens en tant qu'états, ce qui est en désaccord avec la réponse acceptée ici: /gamedev//a/7934
J'ai trouvé cela utile, mais ambigu: comment implémenter un comportement dans une architecture de jeu basée sur des composants? Il suggère d'avoir un composant séparé qui ne contient rien d'autre qu'une machine à états. Mais cela nécessite une sorte de couplage entre le composant de la machine d'état et presque tous les autres composants. Je ne comprends pas comment ce couplage doit être géré. Ce sont quelques suppositions:
A. Les composants dépendent de la machine à états: les
composants reçoivent une référence aux composants de la machine à étatsgetState()
, qui renvoie une constante d'énumération. Les composants se mettent à jour régulièrement et vérifient cela au besoin.B. La machine d'état dépend des composants:
le composant de la machine d'état reçoit des références à tous les composants qu'il surveille. Il interroge leursgetState()
méthodes pour voir où elles en sont.C. Une certaine abstraction entre eux
Utiliser un hub d'événements? Modèle de commande?D. Des objets d'état distincts qui font référence aux composants
du modèle d'état sont utilisés. Des objets d'état distincts sont créés, qui activent / désactivent un ensemble de composants. La machine d'état bascule entre les objets d'état.Je regarde les composants comme des implémentations d' aspects . Ils font tout ce qui est nécessaire en interne pour que cet aspect se produise. Il semble que les composants devraient fonctionner seuls, sans dépendre d'autres composants. Je sais que certaines dépendances sont nécessaires, mais les machines d'état semblent vouloir contrôler tous mes composants.