Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme d'apparition [SDL]

bug ?

Sujet résolu
Anonyme
    12 avril 2006 à 10:03:41

    Salut ! Comme le dit le titre j'ai un probleme au niveau de l'apparition de mon programme :-° Il disparait a la vitesse de l'éclair alors qu'il y a (normalement) de quoi l'arreter ! Si quelqu'un pouvait m'expliquer ce serait cool ! (Je suis pratiquement sur que j'ai fais une erreur tres, tres, tres conne ! ^^ ) Au fait si vous pouvez jeter un coup d'oeil a mon code au niveau du fonctionnement ça m'aiderais ;) Pacrecque je suis pas sur du tout qu'il marche :D Aller, merci a tous (d'avance)

    #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[2];
        SDL_Event event;
        int continuer = 1;

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("3 zozors (c'est pas le tampon finalement)", NULL);

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

        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[0]);
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[1]);

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

        positionZozor[1].x = positionZozor[0].x + 20;
        positionZozor[1].y = positionZozor[0].y - 20;

        positionZozor[2].x = positionZozor[1].x + 20;
        positionZozor[2].y = positionZozor[1].y - 20;

    while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_MOUSEMOTION:
                    positionZozor[0].x = event.motion.x;
                    positionZozor[0].y = event.motion.y;
                    break;

            }

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            SDL_BlitSurface(zozor, NULL, ecran, &positionZozor); /* On place zozor à sa nouvelle position */
            SDL_Flip(ecran);
        }

        SDL_FreeSurface(zozor);
        SDL_Quit();

        return EXIT_SUCCESS;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      12 avril 2006 à 10:15:49

      As-tu bien mis la DLL SDL.dll dans le dossier de ton exécutable?
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        12 avril 2006 à 10:27:38

        Citation : 64enforce

        As-tu bien mis la DLL SDL.dll dans le dossier de ton exécutable?


        Oui, je l'ai bien mis. Le seul conseil au niveau du disfonctionnement c'est dans stderr.txt. J'ai le droit à : Fatal signal: Segmentation Fault (SDL Parachute Deployed). Mais je sais pas a quoi ça correspond ! Quelqu'un le sait-il ?
        Ca veut dire quoi Fatal signal: Segmentation Fault (SDL Parachute Deployed) ????
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 avril 2006 à 10:32:11

          d'enorme erreur au niveau de tes tableaus
          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2006 à 10:39:01

            C'est clair. o_O
            Je te conseille d'aller relire le chapitre rapidos...

            Tableau[2] ==> Tableau[0] et Tableau[1] existe, pas tableau[2].
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              12 avril 2006 à 11:05:36

              j'ai corriger et je doit le dire refait ton code (en tout cas une bonne partie)
              :D

              #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;

                  if(SDL_Init(SDL_INIT_VIDEO) == -1)
                  {
                      fprintf(stderr,"erreur: %s",SDL_GetError());
                      exit(EXIT_FAILURE);
                  }
                  ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                  if(ecran == NULL)
                  {
                      fprintf(stderr,"erreur:%s",SDL_GetError());
                      exit(EXIT_FAILURE);
                  }
                  zozor = SDL_LoadBMP("zozor.bmp");
                  if(zozor == NULL)
                  {
                  fprintf(stderr,"erreur: %s",SDL_GetError());
                  exit(EXIT_FAILURE);
                  }
                  SDL_WM_SetCaption("3 zozors (c'est pas le tampon finalement)", NULL);
                  SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                  SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
                  SDL_WarpMouse(320,240);
                  SDL_Flip(ecran);
              while (continuer)
                  {
                      SDL_WaitEvent(&event);
                      switch(event.type)
                      {
                          case SDL_QUIT:
                              continuer = 0;
                              break;
                          case SDL_MOUSEMOTION:
                              positionZozor[2].x = event.motion.x;
                              positionZozor[2].y = event.motion.y;
                              positionZozor[1].x = event.motion.x;
                              positionZozor[1].y = event.motion.y;
                              positionZozor[0].x = event.motion.x;
                              positionZozor[0].y = event.motion.y;
                              int increment[2] = {0};
                              while(increment[0] != 40)
                              {
                              positionZozor[1].x++;
                              positionZozor[1].y++;
                              increment[0]++;
                              }
                              while(increment[1] != 80)
                              {
                              positionZozor[2].x++;
                              positionZozor[2].y++;
                              increment[1]++;
                              }
                              SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
                              int i;
                              for(i = 0; i < 3 ; i++)
                              SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[i]);
                              break;

                      }
                      SDL_Flip(ecran);
                  }

                  SDL_FreeSurface(zozor);
                  SDL_Quit();

                  return EXIT_SUCCESS;
              }

              Bon ont peu toujour optimiser le code pour le rendre plus petit mais j'avais la flème.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                12 avril 2006 à 12:02:16

                Merci beaucoup, meme si j'ai pas trop pigé ton code ^^
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  12 avril 2006 à 12:09:12

                  quesque ta pas comprit dans mon code? :(
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    12 avril 2006 à 12:19:39

                    Un peu tout mais bon qu'est-ce tu vx quand on est con on est con ^^ et moua, baa je suis con ! J'l'ai dis dans mon 1er post, j'ai du ENCORE faire une erreur conne...Pas loupé, le prog s'arretait parce que j'avais pas mis zozor.bmp dans le dossier de l'exe :D Mais bon ça marchait toujours pas mon code et le tien marche tres bien. Mais vu que j'ai pas compris ton code, baaaa j'ai retapé le mien, et il marche nickel ! :p Voila voila, merci beaucoup ! BYE ;)

                    #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("3 zozors (c'est pas le tampon finalement)", NULL);

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

                        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[0]);
                        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[1]);
                        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor[2]);

                    while (continuer)
                        {
                            SDL_WaitEvent(&event);
                            switch(event.type)
                            {
                                case SDL_QUIT:
                                    continuer = 0;
                                    break;
                                case SDL_MOUSEMOTION:
                                    positionZozor[0].x = event.motion.x;
                                    positionZozor[0].y = event.motion.y;
                                    positionZozor[1].x = event.motion.x + 20;
                                    positionZozor[1].y = event.motion.y + 20;
                                    positionZozor[2].x = event.motion.x + 40;
                                    positionZozor[2].y = event.motion.y + 40;
                                    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;
                    }


                    Citation : charly90

                    Bon ont peu toujour optimiser le code pour le rendre plus petit mais j'avais la flème.



                    J'crois que je l'ai fais la, non ? Il est quand meme 2 fois moins long ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 avril 2006 à 13:53:19

                      Juste un truc : tes 3 premiers blitt servent à rien, surtout que les coordonnées sont entrées plus bas dans le code...
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        12 avril 2006 à 16:47:57

                        c'est vrai, merci a toi ;)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        Probleme d'apparition [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