Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exercice SDL

trainée de zozor

Sujet résolu
    25 mai 2006 à 20:12:54

    bonjour,

    je suis en train de faire des exercices que mateo nous donne et je suis arrivé a celui la :

    Citation : M@teo


    Faites un programme dans lequel 3 Zozors suivent la souris. Placez le premier à la position de la souris (comme on l'a fait dans le cours), puis le second 20 pixels en bas à droite, le troisième encore 20 pixels en bas à droite.

    Vous n'avez besoin que d'une seule surface Zozor pour faire ça. Vous devrez juste la blitter 3 fois à des positions différentes sur l'écran, c'est tout.
    Pour retenir 3 positions différentes, je vous recommande de créer un tableau de 3 SDL_Rect que vous mettrez à jour à des positions différentes à chaque évènement SDL_MOUSEMOTION.



    voila, je comprend plus trop avec son tableau, si quelqu'un peut m'expliquer comment il veut faire merci :) (si possible code avec explication :) )


    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      25 mai 2006 à 20:32:38

      Bah si on te donne le code , ou est le plaisir, ce qu'il veut faire c'est simplement un zozor qui suit la souris, un autre qui est 20 pixels en bas à droite du premier , et encore un autre 20 pikels en bas à droite du 2nd, et il te conseille d'utiliser un tableaux de positions ;)

      SDL_Rect positionZozor[3]
      • Partager sur Facebook
      • Partager sur Twitter
        25 mai 2006 à 20:48:48

        pour etre sur d'avoir compris, je fait donc apres :

        positionZozor[0].x =
        positionZozor[0].y =

        positionZozor[1].x =
        positionZozor[1].y =
        ....

        ?

        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          25 mai 2006 à 21:16:27

          Re-bonjour.

          j'ai remodifier comme dit plus haut. le probleme maitenant c'est que la fentre souvre et se ferme a la vitesse de l'eclair, pourtant à aucun moment continuer = 0;

          voici mon code :

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

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

              SDL_Init(SDL_INIT_VIDEO);

              ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
              SDL_WM_SetCaption("Gestion des évènements en SDL", NULL);

              /* Chargement de Zozor */
              zozor = SDL_LoadBMP("zozor.bmp");
              SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));

              /* On centre Zozor à l'écran */
              positionZozor[0].x = ecran->w / 2 - zozor->w / 2;
              positionZozor[0].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:
                      positionZozor[0].x = event.motion.x; /* On change les coordonnées de Zozor */
                      positionZozor[0].y = event.motion.y;
                      // [2]
                       positionZozor[1].x = positionZozor[0].x + 10;
                       positionZozor[1].y = positionZozor[0].y - 10;
                      // [3]
                        positionZozor[2].x = positionZozor[1].x + 10;
                        positionZozor[2].y = positionZozor[1].y - 10;
                      break;
              }

              SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[0]);
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[1]);
              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[2]);
              SDL_Flip(ecran);
          }

              SDL_FreeSurface(zozor);
              SDL_Quit();

              return EXIT_SUCCESS;
          }


          Pourquoi se ferme t-il tout seul ?

          Encore merci
          • Partager sur Facebook
          • Partager sur Twitter
            25 mai 2006 à 22:16:30

            Relis un coup le chapitre sur les tableaux :-°
            Un tableau commence a 0 (tableau[0]) ;)

            PS : tu dois avoir message d erreur dans stdder :) (signifiant débordement de tableaux) ;)
            • Partager sur Facebook
            • Partager sur Twitter
              26 mai 2006 à 15:19:44

              oui je sais, j'ai deja corriger ce probleme, mais il me fait tjrs la même chose, quelqu'un serait-il me dire de quoi ca vient ?

              Merci

              ps: il me mettai aucune erreur quand je me trompais avec les chiffre du tableaux.
              • Partager sur Facebook
              • Partager sur Twitter
                26 mai 2006 à 16:42:06

                Bonjour,

                ton code est bon car je l'ai testé et il n'y a aucun soucis. Sauf si tu n'as pas mis le fichier zozor.bmp dans le dossier de ton executable :euh: . C'est le problème que j'avais et du coup la fenêtre se fermait immédiatement ;) .
                • Partager sur Facebook
                • Partager sur Twitter

                Exercice SDL

                × 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