Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme avec gestion des evenements.

    15 juillet 2006 à 22:05:48

    Par ou je vais commencer :-° , j'ai suivi le cours "La gestion des évènements (Partie 1/2)" hyper bien, j'ai tout compris et tout... Mon programme s'execute normalement mais quand j'utilise SDL_MOUSEMOTION ou meme SDL_MOUSEBUTTONUP mon "zozor" se deplace ... mais de facon diagonale. Ca veut dire qu'il y a un evenement et que le programme le comprends mais l'image de zozor bouge diagonalement. Par contre avec les boutons dirrectionnels ca marche nickel :D. Je sais pas a quoi c'est du !!! voici mon code :

    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>

    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *zozor = NULL;
        SDL_Event event;
        int continuer = 1;
        SDL_Rect positionZozor;

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Gestion des evenements", NULL);
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        zozor = IMG_Load("zozor.bmp");
        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

        positionZozor.x = ecran->w / 2 - zozor->w / 2;
        positionZozor.y = ecran->h / 2 - zozor->h / 2;

        SDL_EnableKeyRepeat(10, 10);

        while (continuer)
        {
        SDL_WaitEvent(&event);
        switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_ESCAPE:
                            continuer = 0;
                            break;
                        case SDLK_UP:
                            positionZozor.y--;
                            break;
                        case SDLK_DOWN:
                            positionZozor.y++;
                            break;
                        case SDLK_RIGHT:
                            positionZozor.x++;
                            break;
                        case SDLK_LEFT:
                            positionZozor.x--;
                            break;
                    }
                    break;
                case SDL_MOUSEMOTION: /* la j'ai mis ce qu'il faut mais zozor ne suit pas completement la souris */
                        positionZozor.x = event.motion.x;
                        positionZozor.y = event.motion.x;
                    break;
            }

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
        SDL_Flip(ecran);

        }


        SDL_FreeSurface(zozor);
        SDL_Quit();
        return EXIT_SUCCESS;
    }


    Si vous voyez l'eereur faites m'en part :lol: Normalement le code est bon.
    • Partager sur Facebook
    • Partager sur Twitter
      15 juillet 2006 à 22:34:00

      Citation : cader



      #include <stdlib.h>
      #include <stdio.h>
      #include <SDL/SDL.h>
      #include <SDL/SDL_image.h>

      int main(int argc, char *argv[])
      {
          SDL_Surface *ecran = NULL, *zozor = NULL;
          SDL_Event event;
          int continuer = 1;
          SDL_Rect positionZozor;

          SDL_Init(SDL_INIT_VIDEO);

          ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
          SDL_WM_SetCaption("Gestion des evenements", NULL);
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

          zozor = IMG_Load("zozor.bmp");
          SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

          positionZozor.x = ecran->w / 2 - zozor->w / 2;
          positionZozor.y = ecran->h / 2 - zozor->h / 2;

          SDL_EnableKeyRepeat(10, 10);

          while (continuer)
          {
          SDL_WaitEvent(&event);
          switch(event.type)
              {
                  case SDL_QUIT:
                      continuer = 0;
                      break;
                  case SDL_MOUSEMOTION: /* la j'ai mis ce qu'il faut mais zozor ne suit pas completement la souris */
                          positionZozor.x = event.motion.x;
                          positionZozor.y = event.motion.x;
                      break;

               }
                  case SDL_KEYDOWN:
                      switch(event.key.keysym.sym)
                      {
                          case SDLK_ESCAPE:
                              continuer = 0;
                              break;
                          case SDLK_UP:
                              positionZozor.y--;
                              break;
                          case SDLK_DOWN:
                              positionZozor.y++;
                              break;
                          case SDLK_RIGHT:
                              positionZozor.x++;
                              break;
                          case SDLK_LEFT:
                              positionZozor.x--;
                              break;
                      }
                      break;

             
          SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
          SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
          SDL_Flip(ecran);

          }


          SDL_FreeSurface(zozor);
          SDL_Quit();
          return EXIT_SUCCESS;
      }



      Si vous voyez l'eereur faites m'en part :lol: Normalement le code est bon.



      :-° j'ai juste déplacer le SDLK_MOUSEMOTION, il m'avait l'air bien mal mis
      • Partager sur Facebook
      • Partager sur Twitter
        15 juillet 2006 à 22:36:58

        je viens d'essayer ce que Chapuu m'as proposé mais le probleme reste. Quand je bouge ma souris l'image bouge mais de facon diagonale o_O

        EDIT : MILLES EXCUSES !!!!!! je viens de trouver mon erreur :

        case SDL_MOUSEMOTION:
             positionZozor.x = event.motion.x;
             positionZozor.y = event.motion.x;
             break;


        j'ai mis (sans le savoir), positionZozor.y = event.motion.x alors que c'est .y

        Donc, desole pour le derangment ^^

        A ++

        Merci Fradow et aussi a Chappu
        • Partager sur Facebook
        • Partager sur Twitter
          15 juillet 2006 à 22:41:38

          C'est juste une bête erreur de frappe, je l'avais même pas vu du premier coup :
                              positionZozor.y = event.motion.x;

          c'est pas event.motion.x c'est event.motion.y qu'il faut mettre.
          • Partager sur Facebook
          • Partager sur Twitter
            15 juillet 2006 à 22:42:07

            euh ... attend j'ai juste changé sa comme sa .. si t'a fait copier coller ben ... c'est pas bon vu que je viens de voir un truc bizarre ..




                SDL_WaitEvent(&event);
                switch(event.type)
                    {
                        case SDL_QUIT:
                            continuer = 0;
                            break;
                        case SDL_MOUSEMOTION: /* la j'ai mis ce qu'il faut mais zozor ne suit pas completement la souris */
                                positionZozor.x = event.motion.x;
                                positionZozor.y = event.motion.y;
                            break;

                     }
                            switch(event.key.keysym.sym)
                            {
                                case SDLK_ESCAPE:
                                    continuer = 0;
                                    break;
                                case SDLK_UP:
                                    positionZozor.y--;
                                    break;
                                case SDLK_DOWN:
                                    positionZozor.y++;
                                    break;
                                case SDLK_RIGHT:
                                    positionZozor.x++;
                                    break;
                                case SDLK_LEFT:
                                    positionZozor.x--;
                                    break;
                            }
                SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
                SDL_Flip(ecran);

                }



            ;) comme sa c'est mieux déjà
            • Partager sur Facebook
            • Partager sur Twitter

            Probleme avec gestion des evenements.

            × 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