Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fenêtre SDL non permanente !

problème génant

    9 mai 2006 à 20:05:58

    Bonjour/Bonsoir à tous,

    Je suis entrain d'apprendre la programmation via le tutorial de m@teo et mon problème se situe aux chapitres de la SDL. Depuis le début de la partie III ( ouverture de fenêtre ) mes réalisations ont vraiment du mal à se mettre en pause !
    Quand je crée un nouveau code pour affiché quelque chose mes fenêtres disparaissent à chaque fois tout de suite malgré la fonction pause que m@teo nous a fait. Quand je c/c juste la fonction pause mes réalisation disparaissent à la vitesse de la lumière ! Alors que quand je c/c le code entier de mateo, là pas de problème la fenêtre reste affiché malgré mes vérifications qui montre qu'il n'y a pas d'erreur ! ( en comparant ).

    J'en suis à la partie où il faut bouger zozor à l'aide du clavier, voici un code qui ne fait qu'affiché zozor sur un fond noir. Je vous le met pour voir si il y a vraiment erreurs de ma part où si une intervention divine m'empêche de m'épanouir avec la SDL !

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

    void pause();

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

        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
       
        positionZozor.x = (ecran->w / 2) - (zozor->w / 2);
        positionZozor.y = (ecran->h / 2) - (zozor->h / 2);
        zozor = 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;
                    }
            }
        }
    }

    J'utilise généralement Code::Blocks qui me résulte ce code par une ouverture/fermeture quasi-simultané j'ai donc essayé avec un autre IDE qu'est dev c++ et le résultat est le même =(

    Mon code est-il le mal ? Suis-je le mal ? Ou bien y a t-il vraiment des ondes modifiant les résultats d'une compilation qui passe par ma maison ?

    En vous remerciant
    FinalG
    • Partager sur Facebook
    • Partager sur Twitter
      9 mai 2006 à 20:17:25

      Ce code me semble correct ;)
      • Partager sur Facebook
      • Partager sur Twitter
        9 mai 2006 à 20:19:11

        Salut,
        le problème ne vient pas de ta boucle pause, la preuve, mets la juste après avoir initialisé le mode vidéo et elle fonctionne.
        Le programme quitte ainsi à cause d'une erreur, et elle se trouve ici.

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

        Tu demandes au programme de donner les positions de Zozor d'après la taille de l'image, mais à ce moment, tu ne l'as pas encore charger, donc ça plante.
        Essaies avec ça:

            zozor = SDL_LoadBMP("zozor.bmp");
            positionZozor.x = (ecran->w / 2) - (zozor->w / 2);
            positionZozor.y = (ecran->h / 2) - (zozor->h / 2);
        • Partager sur Facebook
        • Partager sur Twitter
          9 mai 2006 à 20:27:14

          Merci beaucoup pour la rapidité et l'exactitude de ta réponse Punsh car effectivement cela fonctionne. J'en conclue donc que je devais faire des erreurs similaires dans mes autres codes
          • Partager sur Facebook
          • Partager sur Twitter

          Fenêtre SDL non permanente !

          × 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