Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question sur SDL_PollEvent

Sujet résolu
    10 juillet 2006 à 20:34:33

    Bonjour à tous,
    Voilà, en fait j'ai une petite question a propos de la fonction SDL_PollEvent:
    Je l'utilise actuellement dans ma boucle infinie dans laquelle je déplace un sprite toutes les x secondes, seulement, le problème est que je gere également les evenement concernant les touches du clavier, par exemple les fleches haut et bas ( pour un curseur de selection sur un menu ), et le problème est que lorsque j'appuie à peine sur le bouton c'est comme si j'avais appuyée dessus 3 ou 4 fois.. Je crois savoir d'où vient le problème, mais je ne vois pas de solution..
    Pourriez vous m'aider, j'imagine que ca doit surement être tout bête ^^
    Merci d'avance pour vos réponses. :)
    • Partager sur Facebook
    • Partager sur Twitter
      10 juillet 2006 à 21:07:20

      Tu donnes à "envent"(la variable SDL_Event) la valeur NULL.
      (a confirmer)
      • Partager sur Facebook
      • Partager sur Twitter
        10 juillet 2006 à 21:18:37

        Citation : Inst@nce

        Tu donnes à "envent"(la variable SDL_Event) la valeur NULL.
        (a confirmer)


        Merci pour ta réponse, mais apparemment, ca ne fonctionne pas... :(
        • Partager sur Facebook
        • Partager sur Twitter
          10 juillet 2006 à 21:48:45

          ;) Utilise un Timer ... j'ai eu le même problème pour mon Space Invaders, à chaque fois que je bougeais mon vaisseaux les ennemis ne bougeaient plus et c'était très chiant...

          :p t'a te la veine il y a un chapitre la dessus dans le cour
          • Partager sur Facebook
          • Partager sur Twitter
            10 juillet 2006 à 21:52:31

            Ah, d'accord, je vais essayer. :) Merci Chappu. ;)
            • Partager sur Facebook
            • Partager sur Twitter
              10 juillet 2006 à 23:08:08

              Re, c'est encore moi, désolé :euh:
              En fait j'ai essayé d'utiliser un Timer pour faire ce que je voulais, mais j'ai un petit problème... Je m'explique:
              En fait, je vais essayer de ne pas vous raconter ma vie entierement parce que je suis sûr que tout le monde s'en fiche totalement mais j'essaye de faire un jeu "Snake" en SDL. Il faut donc que j'assemble plusieurs sprites ( boules ) qui forment le corps du serpent. Pour se faire, j'utilise une boucle for(). Pour pouvoir bouger entierement mon serpent avec ma fonction de callback, je dois donc envoyer plusieurs parametre, c'est pour cela que j'ai créé une structure, mais à la compilation ca plante lamentablement et je ne sais pas d'où ca vient... Je ne trouve pas l'erreur :euh: Peut être que c'est à cause de la fatigue qui commence à se faire ressentir... Voici le code que j'utilise:
              typedef struct TimerParameters TimerParameters;
              struct TimerParameters
              {
                  SDL_Surface *surface;
                  SDL_Surface *screen;
                  SDL_Rect *location;
              };

              Uint32 moveSnake(Uint32 intervalle, void *parameter);

              Bon sur ce bout de code, il n'y a apparemment aucun problème, ensuite dans main():
              snake.surface = snakeBody;
                  snake.screen = screen;
                  snake.location = location_SnakeBody;
                  timer = SDL_AddTimer(30, moveSnake, &snake);

              Ca a l'air de fonctionner également. Et bien sûr, le code qui bug:
              Uint32 moveSnake(Uint32 intervalle, void* parameter)
              {
                  long i = 0;
                  SDL_Rect *location = parameter->location;
                  SDL_Surface *screen = parameter->screen;
                  SDL_Surface *surface = parameter->surface;

                  for ( i = 0; i < SCREEN_WIDTH / SNAKE_BODY_WIDTH; i++ )
                  {
                      if ( i * SNAKE_BODY_WIDTH + 26 < SCREEN_WIDTH && i * SNAKE_BODY_WIDTH + 26 != SCREEN_WIDTH )
                          location[i].x++;
                      if ( i * SNAKE_BODY_WIDTH + 26 == SCREEN_WIDTH )
                          location[i].y++;

                      SDL_BlitSurface(*surface, NULL, *screen, &parameter->location);
                  }

                  return intervalle;
              }

              Ca doit être un problème avec ma structure que je dois mal utiliser.. Mais je ne vois vraiment pas o_O
              ( J'ai bien sûr grandement raccourci mon code pour ne vous montrer que l'essentiel ). SI vous avez besoin de plu de précisions, n'hésitez pas...
              Un grand, énorme, gigantesque merci à celui ou celle qui pourra m'aider. :)
              • Partager sur Facebook
              • Partager sur Twitter
                10 juillet 2006 à 23:20:11

                parameter est de type void*, donc tu ne serait pas encore récupérer les sous variables de la structures.

                TimerParameters param = parameter;
                SDL_Rect *location = param->location;
                SDL_Surface *screen = param->screen;
                SDL_Surface *surface = param->surface;


                Et ici pareil, et tu n'as pas besoin de mettre un & puisque location est un pointeur et contient déjà une adresse. Même remarque avec les * des variables surface et screen.
                SDL_BlitSurface(surface, NULL, screen, param->location);


                Edit
                location[i].x++;

                location contient une adresse, donc c'est un pointeur, alors:
                location[i]->x++;

                Même chose pour y.
                • Partager sur Facebook
                • Partager sur Twitter
                  10 juillet 2006 à 23:30:15

                  Ah ! :D
                  Merci beaucoup pour ton aide ! :) Cette fois c'est bon. ;)
                  Merci à vous tous pour votre aide. :)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Question sur 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