Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec affichage de zozor

Sujet résolu
    14 avril 2006 à 23:03:04

    Bonjour.

    J'ai essayé de faire apparaître zozor au centre de mon écran, seulement, quand je veux compiler, Windows me donne une belle fenêtre :

    Citation : Windows

    evenements.exe doit fermer car il a effectué une opération non conforme...



    Voici mon code :

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

    void pause();

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

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

        SDL_Init(SDL_INIT_VIDEO);

        ecran = SDL_SetVideoMode(800, 600, 32, SDL_FULLSCREEN);
        SDL_WM_SetCaption("Tester les événements", NULL);

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));

        SDL_LoadBMP("zozor.bmp");
        SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
        SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);

        SDL_Flip(ecran);

        pause();

        SDL_FreeSurface(zozor);
        SDL_Quit();

        return EXIT_SUCCESS;
    }

    void pause()
    {
        int continuer = 1;
        SDL_Event event;

        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_q:
                            continuer = 0;
                            break;
                    }
            }
        }
    }



    J'ai essayé de changer positionZozor.x et positionZozor.y pour 0.
    Ça ouvre la fenêtre, mais elle se ferme à la vitesse de la lumière.

    Merci d'avance pour votre aide :)
    • Partager sur Facebook
    • Partager sur Twitter
      14 avril 2006 à 23:18:27

      Salut, Il faudrait définir la surface avant de faire des calcul avec non?

          SDL_Init(SDL_INIT_VIDEO);

          ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_FULLSCREEN);
          SDL_WM_SetCaption("Tester les événements", NULL);

          positionZozor.x = (ecran->w / 2) - (zozor->w / 2);
          positionZozor.y = (ecran->h / 2) - (zozor->h / 2);
      • Partager sur Facebook
      • Partager sur Twitter
        14 avril 2006 à 23:20:50

        Merci, ça marche :D

        Mais maintenant elle s'ouvre et se ferme même avec la fonction pause()..
        • Partager sur Facebook
        • Partager sur Twitter
          14 avril 2006 à 23:31:29

          Le problème est ici:
              SDL_LoadBMP("zozor.bmp");

          Il faut faire comme ceci:
          zozor =  SDL_LoadBMP("zozor.bmp");
          • Partager sur Facebook
          • Partager sur Twitter
            14 avril 2006 à 23:32:55

            ..

            C'est dans ces moments-là qu'on se sent bête :D

            Merci bien

            EDIT >> Arf ce n'est pas ça non plus.
            Je suis sûr que c'est une erreur toute bête ^^
            • Partager sur Facebook
            • Partager sur Twitter
              14 avril 2006 à 23:39:08

              Jai tester chez moi et ce code marche:
              #include <stdlib.h>
              #include <stdio.h>
              #include <SDL/SDL.h>
              #include <SDL/SDL_image.h>

              void pause();

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


                  SDL_Init(SDL_INIT_VIDEO);

                  ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
                  SDL_WM_SetCaption("Tester les événements", NULL);

                  zozor = SDL_LoadBMP("zozor.bmp");

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



                  SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));


                  SDL_SetColorKey(zozor, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
                  SDL_BlitSurface(zozor, NULL, ecran, &positionZozor);

                  SDL_Flip(ecran);

                  pause();

                  SDL_FreeSurface(zozor);
                  SDL_Quit();

                  return EXIT_SUCCESS;
              }

              void pause()
              {
                  int continuer = 1;
                  SDL_Event event;

                  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_q:
                                      continuer = 0;
                                      break;
                              }
                      }
                  }
              }
              • Partager sur Facebook
              • Partager sur Twitter
                14 avril 2006 à 23:41:28

                Arf j'avais mal placer les positionZozor

                Merci pour ton aide :)
                • Partager sur Facebook
                • Partager sur Twitter

                Problème avec affichage de zozor

                × 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