Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme : 2 evenement en meme temps ?

Sujet résolu
    14 juin 2007 à 17:00:27

    voila, je travaille sur un petit jeu style : space invader (un avion qui tir sur des ennemi en 2D).
    est j'ai un probleme car quand mon programme doit gere 2 evenement en meme temps, il en fait plus 1 (jutilise la lib SDL pour gere les evenement et afficher mon jeu).
    je vous donne un exemple pour mieux comprendre, quand jappui sur la fleche droite pour que mon avion aille a droite, lorseque jappui sur espace pour attaque, mon avion attaque mais arrete de se deplacer, et meme si je lache espace il est quand meme arrter, je suis obliger de lacher la touche droite pour rapuier dessu et le refaire avance.
    sa na pas lair grand chose comme probleme mais dans un scape invader si on sarrete tout le temps on se fais bonbader ^^.
    donc le probleme vien je pense que comme la touche espace est appuyer apres la touche droite, la touche droite ne fais plus partie des evenement.
    pour essayer que sa marche jai cree une variable de type bool qui dis vraix lorsque la touche droite est ENFONCER, est faux lorsque la touche droite est RELEVER, est dire il se deplace quand : vraix,
    mais meme avec sa lorseque jappui sur espace, mon avion continu, mais lorsque que je lache espace (car si je veu retirer je doi reapuyer donc on ne reste pas longtemp appuer sur espace quand on joue ^^) mon avion sarrete encore.
    si quelqun comprend le probleme est peu maider, sa maiderai a avancer ^^.
    merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
      14 juin 2007 à 18:06:47

      Bonjour

      J'ai trouvé ça dans le tuto openGL :

      Citation : Tuto de Kayl

      Je vous l'ai dit juste avant, utiliser l'événement clavier juste à son apparition n'est pas la bonne solution pour gérer un déplacement fluide.
      Nous allons donc nous contenter de mettre à jour un tableau interne de l'état des touches qui nous intéressent.

      Par exemple si la touche SDLK_z nous intéresse et qu'on reçoit un événement SDL_KEYDOWN, nous mettrons la case SDLK_z de notre tableau de booléens à true, pour indiquer qu'elle est actuellement enfoncée.
      De même sur la réception d'un événement SDL_KEYUP avec la touche SDLK_z, nous mettrons la case correspondante du tableau à false pour indiquer qu'elle n'est pas/plus enfoncée.

      Comment faire correspondre un nom de touche avec une indice dans un tableau ?


      Nous allons pour cela utiliser ce qu'on appelle, comme en PHP, un tableau associatif. Au lieu de faire mon_tableau[indice_numérique] nous ferons mon_tableau_associatif[clé]. L'outil en C++ qui permet de faire ça est appelé une map. On la définit par les 2 types qu'elle utilise, le type pour la clé (la clé est ce qui remplace l'indice numérique, bien qu'elle puisse être numérique aussi :) ), et le type de la valeur à stocker.
      Dans notre cas, nous souhaitons stocker des booléens (bool) indiquant si une touche (SDLKey) est actuellement enfoncée ou non.
      Cela correspond donc à la map suivante :
      Code : C++
      typedef std::map<SDLKey,bool> KeyStates;


      On peut l'utiliser ainsi :
      Code : C++
      Keystates keystates; //déclaration d'une variable de type KeyStates
      keystates[SDLK_Z] = true; //association bidon, eh oui j'ai pas recu d'évènement comment je peux savoir ? :p )



      Voici le lien du tuto : ici

      Je pense que ça marcherais.
      • Partager sur Facebook
      • Partager sur Twitter
        14 juin 2007 à 18:45:17

        Regarde dans la FAQ. C'est si compliqué?????????
        • Partager sur Facebook
        • Partager sur Twitter
          14 juin 2007 à 18:58:28

          je comprend pas de quelle FAQ tu parle ?
          a par sa, quand jecris: typedef std::map<SDLKey,bool> KeyStates;
          sa cree une erreur, je ne sais pas pourquoi, mais mon "map" ne change pas de couleur comme dans le tuto, pour n'est-il pas reconu ? ya t-il une lib a inclure pour la fonction "map" ?
          • Partager sur Facebook
          • Partager sur Twitter
            14 juin 2007 à 19:02:54

            Pole parle de la FAQ du forum C. Il y a une partie
            sur SDL qui devrait t'intérresser.
            • Partager sur Facebook
            • Partager sur Twitter
              14 juin 2007 à 20:23:13

              merci je pense que sa va marcher maintenant ^^.
              • Partager sur Facebook
              • Partager sur Twitter

              Probleme : 2 evenement en meme temps ?

              × 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