Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion des entrées clavier (C++ SFML)

    3 juin 2023 à 19:00:10

    Hello !

    Je viens pour une demande assez ouverte. Cela fait plusieurs mois que j'essaie d'apprendre la programmation de jeux en C++.

    J'ai suivi les ZesteDuSavoir, plusieurs formations sur Udemy et OpenClassrooms et les excellents cours de codewithmosh.com. Et je ne parviens toujours pas à conceptualiser une gestion des entrées claviers qui me plaît en C++ / SFML.

    Sur un projet type Asteroids (https://github.com/hibiscae-m/Asteroids-remastered), j'ai géré les entrées clavier au sein de la classe Flight (le vaisseau censé être contrôlé par le joueur) avec la fonction sf::Keybaord::isKeyPressed appelée grosso modo à chaque tour de boucle du programme. Je n'en suis pas vraiment satisfait car je considère que les entrées clavier devraient se gérer de manière centralisée au sein d'une même classe.

    C'est ce que j'ai essayé de faire sur un second projet beaucoup plus simple du jeu du Morpion (https://github.com/hibiscae-m/Tic-Tac-Toe). Ici, la classe Playground (qui agit comme Game Manager), a bien une fonction dédiée à la gestion des évènements. Là où je ne trouve pas ça beau, c'est que le joueur (ici, le curseur) réagissant aux entrées clavier fait parti aux yeux de Playground d'un tableau de smart pointers constituée de membres d'une classe mère Elements.cpp. Ses classes dérivées sont donc le curseur, les croix et les ronds. Lorsque j'enregistre une entrée clavier dans la fonction processInputs de la classe Playground, je parcours ce tableau et suis donc obligé de "filtrer" avec un Elements::TYPE::Cursor.

    J'aimerai beaucoup entendre vos avis sur les deux méthodes, et savoir s'il en existe d'autre ?

    Merci !

    -
    Edité par Hibiscae 3 juin 2023 à 19:00:58

    • Partager sur Facebook
    • Partager sur Twitter
      4 juin 2023 à 12:12:40

      tu peux peut etre faire une classe event qui revoie une commande qui sera traitée par l'objet qui gere la mécanique du jeu

      enum class Command {idle =0, fire, left, right, .....}
      
      ...  process ...
      
      return Command::the command
      
      


      sinon dans le bouquin SFML Game Development il mettre la fonction de la commande en callback

      mais je n'ai pas encore tout compris

      -
      Edité par Djarkan 4 juin 2023 à 12:15:24

      • Partager sur Facebook
      • Partager sur Twitter
        5 juin 2023 à 13:18:34

        Merci beaucoup de ta réponse! Je pense voir à peu près le concept, il faut que j'essaie :)

        Je vais voir pour mettre la main sur ce bouquin aussi, il a l'air pas mal.

        Si d'autres passent par là et auraient d'autres suggestions je suis preneur !

        • Partager sur Facebook
        • Partager sur Twitter

        Gestion des entrées clavier (C++ SFML)

        × 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