Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] SDL_PollEvent

je ne veux pas de repetitions !

    17 mai 2006 à 21:07:41

    salut !
    j'ai créé un ptit pacman, et pour deplacer mon joueur, je prends les evenements avec SDL_PollEvent.
    le probleme, c'est qu'en appuyant sur la fleche, le perso se deplace de 4-5 cases, alors qu'on veut que ce ne soit que d'une.
    dans mes "progs" en WaitEvent, j'ai pas ce pb.
    comment le resoudre ?
    si je laisse la touche enfoncée, il se deplace de bcp de cases, et si je n'enfonnce que brievement, il se deplace de 2-3. pourtant g pas fait enable keyrepeat.
    merci ;)
    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2006 à 21:33:48

      envoie ton code, mais verifie que tu fais tes tests avec SDL_KEYDOWN...
      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2006 à 21:36:20

        Tu peux aussi utiliser un système de boléens en calculant le temps entre SDL_KEYDOWN et SDL_KEYUP et déplacer le joueur en fonction du temps.
        • Partager sur Facebook
        • Partager sur Twitter
          17 mai 2006 à 22:11:25

          il faut faire avec un booléen, comme ca:

          while (continuer)
          {
              SDL_PollEvent(&event);
              switch(event.type)
              {
                  case SDL_QUIT:
                      continuer = 0;
                      break;
                  case SDL_MOUSEBUTTONUP:
                      positionZozor.x = event.button.x; /* On change les coordonnées de Zozor */
                      positionZozor.y = event.button.y;
                      break;
                  case SDL_MOUSEMOTION:
                      positionCurseur.x = event.motion.x; /* On change les coordonnées du Curseur */
                      positionCurseur.y = event.motion.y;
                      break;
                  case SDL_KEYDOWN:
                      if (!toucheEnfoncee)
                      {
                          switch(event.key.keysym.sym)
                          {
                              case SDLK_UP: // Flèche haut
                                  positionZozor.y--;
                                  break;
                              case SDLK_DOWN: // Flèche bas
                                  positionZozor.y++;
                                  break;
                              case SDLK_RIGHT: // Flèche droite
                                  positionZozor.x++;
                                  break;
                              case SDLK_LEFT: // Flèche gauche
                                  positionZozor.x--;
                                  break;
                          }
                      }
                      toucheEnfoncee = 1;
                      break;
                  case SDL_KEYUP:
                      toucheEnfoncee = 0;
                      break;
              }

              SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran */
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor); /* On place zozor à sa nouvelle position */
              SDL_BlitSurface(curseur, NULL, ecran, &positionCurseur); /* On place le curseur à sa nouvelle position */
              SDL_Flip(ecran); /* On met à jour l'affichage */
          }

          ;)

          tu peut après te faire ta fonction de répétition de touche, en mettant à 0 toucheEnfoncee au bout d'1 certain temps... :)
          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2006 à 12:38:43

            as ouais pas mal !
            merci :p !!
            • Partager sur Facebook
            • Partager sur Twitter

            [SDL] SDL_PollEvent

            × 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