Partage
  • Partager sur Facebook
  • Partager sur Twitter

State pattern, gestion des entrées dans un jeu

    14 juillet 2019 à 18:29:48

    Bonjour,

    J'utilise le State pattern pour gérer l'input du joueur dans une boucle de jeu (qui est le Context dans mon pattern si je comprends bien). Il y a le ExplorationState : l'input sert à déplacer le héros et déclencher les interactions avec les PNJs et les éléments du décors; il y a le DialogState, l'input sert à faire défiler les messages et sélectionner des items dans propositions de choix, etc. J'ai fait ça pour décharger la classe qui gère la boucle du jeu. C'est la première fois que j'essaye ce pattern.

    Je coince cependant sur les méthodes handleInput() : selon tel ou tel State, handleInput() va déclencher des actions qui nécessitent plusieurs informations du Context. Par exemple, pour ExplorationState, déplacer le héros nécessite le héros, les polygones à tester autour du héros pour les collisions, etc.

    J'ai donc le choix : soit je passe beaucoup d'informations aux States (beaucoup de blagues à faire ici), et donc quasiment tous les champs de mon contexte ont des accesseurs et des mutateurs, et donc autant carrément les déclarer public? Ou bien les actions concrètes (déplacer le héros par exemple) sont des méthodes publiques de mon Context, et les handleInput() de mes States appellent ces méthodes.

    Que devrais-je faire selon vous? Merci d'avance de vos réponses!

    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2019 à 11:01:59

      À te lire, il semble qu'il y a trop de choses dans ta classe qui sert de contexte.

      Si ton contexte est un personnage, en caricaturant tu ne devrais avoir que son nom et son State en variables d'instance.

      Tout le reste, notamment tes polygones, devrait se trouver dans une autre classe qui gère la situation du jeu. C'est cette classe que tu passes à tes States.
      Ce n'est d'ailleurs pas obligé que ce soit la même : un ExplorationState peut recevoir des polygones et DialogState une conversation à compléter.

      En bref, découpe davantage pour ne jamais avoir une classe qui soit obligée de gérer elle-même des situations de natures différentes.

      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2019 à 14:03:00

        Merci pour ta réponse, je vais essayer de décharger mon Context en termes d'informations

        • Partager sur Facebook
        • Partager sur Twitter

        State pattern, gestion des entrées dans un jeu

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown