Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Même une fois la fonction quittée, l'écran ne s'éfface pas

Cette SDL n'a pas fini de me donner du fil à retordre XD

Sujet résolu
    20 août 2006 à 14:55:23

    Bonjour, je viens vous parler d'un problème assez bizarre avec la SDL...

    Je suis dans la fonction main();. Je passe à une autre fonction. De retour dans main(); , l'"écran" de la fonction précèdente ne s'est pas effacé. (En gros quand je retourne dans la fonction main() n'écran ne s'"actualise" pas).

    Je suis alors retourné dans mon dossier de tests SDL pour essayer de corriger ce problème. J'ai essayé tout ce que je pouvais, rien à faire.

    Voici mon code source :
    main.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include "constantes.h"


    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL, *texte = NULL;
        SDL_Event event;
        SDL_Rect positionTexte;
        TTF_Font *police = NULL; /* Stockera les informations de police */
        SDL_Color couleurNoire = {0, 0, 0}, couleurBlanche = {255, 255, 255};
        int continuer = 1;
        char cTexte[] = "Test";


        SDL_Init(SDL_INIT_VIDEO);
        TTF_Init();


        ecran = SDL_SetVideoMode(LARGEUR_FENETRE, HAUTEUR_FENETRE, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
        SDL_WM_SetCaption("Test", NULL);

        /* Chargement de la police */
        police = TTF_OpenFont("times.ttf", 30);


        positionTexte.x = 0;
        positionTexte.y = 0;

        texte = TTF_RenderText_Blended(police, cTexte, couleurNoire);

        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
        SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
        SDL_Flip(ecran);


        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
                case SDL_KEYDOWN:
                    if(event.key.keysym.sym == SDLK_KP1)
                    {
                        afficher(ecran, police, cTexte);
                        SDL_Flip(ecran);
                    }
                    break;
            }

        }

        TTF_CloseFont(police);
        TTF_Quit();

        SDL_FreeSurface(texte);
        SDL_FreeSurface(ecran);

        SDL_Quit();

        return EXIT_SUCCESS;
    }



    fonction afficher
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <FMOD/fmod.h>
    #include "son.h"
    #include "constantes.h"



    void afficher(SDL_Surface* ecran, TTF_Font *police, char cTexte[])
    {
        SDL_Surface *texte = NULL;
        SDL_Rect position;
        SDL_Color couleurNoire = {0, 0, 0}, couleurBlanche = {255, 255, 255};
        SDL_Event event;
        int continuer = 1;

        texte = TTF_RenderText_Blended(police, cTexte, couleurNoire);

        position.x = 0;
        position.y = 300;

            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
            SDL_BlitSurface(texte, NULL, ecran, &position);
            SDL_Flip(ecran);

        while(continuer)
        {
            SDL_WaitEvent(&event);
            if(event.type == SDL_QUIT) // Si on demande à quitter
               continuer = 0;
        }
        SDL_FreeSurface(texte);

    }


    Chez moi, même quand on quitte la fonction afficher (en faisant une action SDL_QUIT ce qui revient sous windows à cliquer sur la croix en haut à droite) l'écran reste comme si on était rester dans la fonction afficher(); ! Pourtant, on revient bien dans main(); (j'ai fait des tests avec fprintf).
    Pouvez vous me dire d'où vient l'erreur SVP ? Merci d'avance ;)
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 août 2006 à 15:25:20

      SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
          SDL_BlitSurface(texte, NULL, ecran, &positionTexte);
          SDL_Flip(ecran);


      doit aller a la fin de la boucle while ;)

      • Partager sur Facebook
      • Partager sur Twitter
        20 août 2006 à 16:26:24

        Citation : Vinc'

        Déjà essayé...
        et ça fonctionne pas :(


        Tu parle du while de la fonction ?
        TheDeadMster parle du while de la fonction !
        • Partager sur Facebook
        • Partager sur Twitter
          20 août 2006 à 16:53:20

          Ah ! Ben attendez je vais essayer...
          EDIT : j'essayerais ce soir, là j'ai autre chose à faire... Mais continuer à proposer svp ;) !
          • Partager sur Facebook
          • Partager sur Twitter
            21 août 2006 à 11:33:41

            UP
            Le truc tout bête...
            C'était presque ce que a dit TheDead Master sauf que c'était dans le main();
            ^^'
            Sujet résolu ;)
            Enjoy
            • Partager sur Facebook
            • Partager sur Twitter
              21 août 2006 à 11:59:07

              TheDeadMaster parlait effectivement du main ..
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                21 août 2006 à 14:37:41

                Enfaite, je parlai pour les deux, si tu relis les cours tu verras que M@téo dit que la boucle principal doit toujours être comme ça:

                while (continuer)
                {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                        case SDL_TRUC: /* Gestion des évènements de type TRUC */
                        case SDL_BIDULE: /* Gestion des évènements de type BIDULE */
                    }

                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255)); /* On efface l'écran (ici fond blanc) */
                    /* On fait tous les SDL_BlitSurface nécessaires pour coller les surfaces à l'écran */
                    SDL_Flip(ecran); /* On met à jour l'affichage */
                }
                • Partager sur Facebook
                • Partager sur Twitter

                [SDL] Même une fois la fonction quittée, l'écran ne s'éfface pas

                × 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