Je viens d'un environnement MVC (Flex et Rails) et j'aime les idées de séparation du code, de réutilisation, d'encapsulation, etc. Il est facile de construire des choses rapidement et de réutiliser des composants dans d'autres projets. Cependant, il a été très difficile de respecter les principes MVC lorsque j'ai essayé de construire des applications complexes, pilotées par l'état, asynchrones et animées.
J'essaie de créer des transitions animées entre plusieurs vues imbriquées dans une application et cela m'a fait réfléchir pour savoir si je ne me trompais pas moi-même... Peut-on appliquer les principes du MVC à ceux de l'intelligence artificielle (arbres de comportement, machines à états hiérarchiques, états imbriqués), comme les jeux ? Ces deux disciplines se combinent-elles bien ?
Il est très facile de garder les vues/graphiques ignorantes de tout ce qui est extérieur à elles-mêmes lorsque les choses sont statiques, comme avec un système CMS HTML ou autre. Mais lorsque vous commencez à ajouter des transitions complexes pilotées par l'état, il semble que tout doit savoir tout ce qui se passe, et le MVC devient presque un obstacle. Qu'en pensez-vous ?
Mise à jour :
Un exemple. En ce moment, je travaille sur un site web en Flex. Je suis arrivé à la conclusion que pour animer correctement chaque élément imbriqué dans l'application, je dois les considérer comme des agents d'intelligence artificielle. Chaque "vue" possède donc son propre arbre de comportement. C'est-à-dire qu'elle effectue une action (s'affiche et se cache) sur la base de l'option contexte (quelles sont les données sélectionnées, etc.). Pour ce faire, j'ai besoin d'une chose de type ViewController, que j'appelle un Presenter. J'ai donc une vue (les graphiques présentés en MXML), un présentateur (qui définit les animations et les actions que la vue peut entreprendre en fonction de l'état et des états imbriqués de l'application), et un modèle de présentation pour présenter les données à la vue (par le biais du présentateur). J'ai également des modèles pour les objets de valeur et des contrôleurs pour gérer les URL et les appels de base de données, etc... tous les trucs statiques/html normaux de type MVC.
Pendant un certain temps, j'ai essayé de trouver comment structurer ces "agents" de manière à ce qu'ils puissent réagir au contexte qui les entoure (ce qui est sélectionné, etc.). Il me semblait que tout devait être conscient de tout le reste. Et puis j'ai lu quelque chose sur une table/liste de chemin/navigation pour les jeux et j'ai immédiatement pensé qu'ils avaient une table centralisée de toutes les actions précalculées que chaque agent peut prendre. Je me suis donc demandé comment ils structurent réellement leur code.
Tout ce qui concerne les jeux vidéo en 3D est un grand secret et, d'après ce que j'ai vu, une grande partie est réalisée avec une interface utilisateur/éditeur graphique, comme la définition des arbres de comportement. Je me demande donc s'ils utilisent une sorte de MVC pour structurer la façon dont leurs agents répondent à l'environnement, et comment ils gardent leur code modulaire et encapsulé.