Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL]Proble SDL_freesurface

Sujet résolu
    27 novembre 2008 à 7:21:27

    Bonjour , j'ai un problème : il m'est impossible de supprimer une surface dans le code suivant :
    #include <stdlib.h>
    #include <stdio.h>
    
    #include <SDL/SDL.h>
    #include <SDL/SDL_ttf.h>
    
    
    
    int main(int argc, char *argv[])
    {
    
        // INITIALISATION DES VARIABLES
        SDL_Surface *ecran = NULL,*texte = NULL;
        TTF_Font *police = NULL;
        SDL_Event event;
        SDL_Rect posLogin;
    
        posLogin.x=230;
        posLogin.y=107;
        char login[50] = "logintest";
        int focus = 0;
        int continuer = 0;
    
    ecran = SDL_SetVideoMode(800,600, 32,SDL_HWSURFACE);//SDL_FULLSCREEN
        SDL_WM_SetIcon(IMG_Load("icon.bmp"), NULL);
        SDL_WM_SetCaption("Isnark", NULL);
        SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));
    
        // INITIALISATION
        SDL_Init(SDL_INIT_VIDEO);
        TTF_Init();
        SDL_EnableUNICODE( 1 );
    
    
        SDL_Color couleurNoire = {0, 0, 0};
        police = TTF_OpenFont("fonts/sensation.ttf", 65);
    
    
    texte = TTF_RenderText_Blended(police,login, couleurNoire);
                            SDL_BlitSurface(texte, NULL, ecran, &posLogin);
    
        //BOUCLE PRINCIPALE
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
    
    
        //APPUI D UNE TOUCHE
                case SDL_KEYDOWN:
                    switch(event.key.keysym.unicode)
                    {
                        case SDLK_a:
    
                                SDL_FreeSurface(texte);
                            break;
                        case SDLK_F10:
                            SDL_FreeSurface(texte);
                            break;
                        case SDLK_ESCAPE: // Flèche haut
                            continuer=0;
                            break;
    
                    }
                    break;
    
             envoyer();
            }
            SDL_Flip(ecran);
        }
    
        //FERMER PROGRAMME
        TTF_CloseFont(police); /* Doit être avant TTF_Quit() */
        TTF_Quit();
        SDL_Quit();
    
        return EXIT_SUCCESS;
    }
    


    Vous avez un conseil ? Merci beaucoup et bonne matinée
    • Partager sur Facebook
    • Partager sur Twitter
      27 novembre 2008 à 7:39:31

      Citation : istu5

      il m'est impossible de supprimer une surface dans le code suivant :


      C'est à dire? Erreurs ou warnings à la compilation? Plantage lors de l'exécution?
      Soit plus précis s'il te plaît.
      • Partager sur Facebook
      • Partager sur Twitter
        27 novembre 2008 à 16:19:29

        Bonjour,

        S'il s'agit 'd'effacer' la surface texte, tu peux la recouvrir d'un rectangle de la couleur du fond :

        posLogin.x = 230;
        posLogin.y = 107;
        posLogin.w = texte->w;
        posLogin.h = texte->h;
        
        SDL_FillRect(ecran,&posLogin,SDL_MapRGB(ecran->format,255,255,255));
        


        S'il s'agit de libérer la surface, on utilise :

        SDL_FreeSurface(texte);
        
        • Partager sur Facebook
        • Partager sur Twitter
          27 novembre 2008 à 17:04:00

          J'ai essayé le free_surface ( merci de lire mon code) et cela ne marche pas
          • Partager sur Facebook
          • Partager sur Twitter
            27 novembre 2008 à 18:02:53

            Peut être en plaçant le blit :

            SDL_BlitSurface(texte, NULL, ecran, &posLogin);

            dans la boucle ?

            • Partager sur Facebook
            • Partager sur Twitter
              28 novembre 2008 à 6:57:20

              Toujours pas . Merci quand même . Chez vous , ce code fonctionne ?
              • Partager sur Facebook
              • Partager sur Twitter
                28 novembre 2008 à 12:29:40

                Salut,

                Pourrais tu préciser ce que tu souhaites que ton code réalise ?

                a++
                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  28 novembre 2008 à 18:11:18

                  Je veux que quand j'aappuie sur F10 , le texte s'éfface mais le programme plante . Jack48 ta solution est peuêtre bonne si l'ordi ne garde pas en mémoire le fait qu'ojn ai mis un rectangle car je voudrais effacer une surface plus de 100 fois ! Cela ne consommerait-il pas trop de mémoire ram de le faire ?

                  Merci beaucoup
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 novembre 2008 à 9:01:38


                    Citation : istu5


                    Je veux que quand j'aappuie sur F10 , le texte s'éfface mais le programme plante . Jack48 ta solution est peuêtre bonne si l'ordi ne garde pas en mémoire le fait qu'ojn ai mis un rectangle car je voudrais effacer une surface plus de 100 fois ! Cela ne consommerait-il pas trop de mémoire ram de le faire ?

                    Merci beaucoup



                    La solution de Jack48 est la bonne.
                    Ta surface ne va pas être n'est initialisée qu'une fois en dehors de ta boucle principale, ensuite sois tu affiche la surface, sois tu affiche un rectangle de la couleur du fond.
                    Si tu ne veux pas afficher un rectangle pour rien (plus rien à afficher), pourquoi ne pas mettre un flag, qui est mis à 1 quand le texte est affiché et mis 0 à lors du premier effacement. Ainsi tu à juste à tester si il y a un texte à effacer.

                    a++
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Zeste de Savoir, le site qui en a dans le citron !
                      29 novembre 2008 à 9:41:21

                      Merci beaucoup , j'ai trouvé , il me suffit de re blitter le fond dessus
                      • Partager sur Facebook
                      • Partager sur Twitter

                      [SDL]Proble SDL_freesurface

                      × 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