Envoyé par
r0d
Enfin, concernant les derniers points, il faut comprendre une chose: contrairement à la théorie, dans la vraie vie un état contient souvent des données.
Prenons l'exemple d'un jeu de plateforme: le personnage aura disons 3 états: marche, saut et attaque. On n'est pas obligé d'utiliser une machine à état pour faire ça, mais c'est une solution possible; en particulier c'est fort pratique pour gérer les animations et les transitions entre animations.
Déjà, si le jeu est multijoueur, alors utiliser des singletons pour les états n'est pas possible, puisque chaque personnage a ses propres états.
Ensuite, chaque état aura des données qui, justement, caractérise cet état. Par exemple, l'état "marche" aura besoin de données du type 'direction', 'vitesse' ou encore des informations concernant l'animation (sprite courant), ce genre de choses.
Dans d'autres situations, par exemple dans le cas de logiciels qui commandent des robots complexes (informatique industrielle), alors les états peuvent avoir beaucoup, beaucoup plus de données (je pense notamment aux données relatives aux capteurs). Et d'un point de sémantique, ça n'a pas de sens de faire remonter ces données au niveau du contexte, ni même de la super-classe State, parce que ces données sont spécifiques à chaque état. On peut encapsuler ces données dans une structure qui sera agrégée par les états concret, mais le problème reste le même: un new peut être coûteux, et surtout en terme de code (le problème de la mémoire est très rarement important).
Partager