Partage
  • Partager sur Facebook
  • Partager sur Twitter

SDL et écraser une frame

Sujet résolu
Anonyme
    11 janvier 2006 à 20:20:27

    Bonjour.
    Jai fait un petit code avec SDL pour que lorsque jappuis sur u , une image de tux s'affiche et sur t une autre image de tux s'affiche .Ca marche bien mais le probleme est que si j'appuis sur t et apres sur u le premier tux ne disparrait pas et le second se superpose au premier .Alors comment faire pour eviter cela ? Ya til une fonction spceciale ?
    Pour tous les interresé voici mon code :
    // Le header de SDL
    #include <SDL.h>
    #include "prototype.h" //on inclue le fichier h qui contient le prototype des fonction

    SDL_Rect rect; // Source
    SDL_Rect dest; // Destination
    SDL_Event event; // On en aura besoin plus tard

    //on defini une surface Screen et perso                 
    SDL_Surface * Screen;         
    SDL_Surface * perso;


    int main(int argc,char **argv)                     
    {
        //initialisation de SDL
        initialiser();
       
            rect.x=0;
        rect.y=0;
        rect.w=50;
        rect.h=350; // L'image fait 50*50

       /* dest.x=160;
        dest.y=160;
        dest.w=254;
        dest.h=300;*/

       
      tux();
         // Boucle infinie
      while(1)
      {
      // Traitement des commandes
      while(SDL_PollEvent(&event))
      {
        // Type d'évènement
        switch(event.type)
        {
          case SDL_KEYDOWN:
            // Si on presse une touche
            switch(event.key.keysym.sym)
            {             
                            case SDLK_t:
                            /*instruction de t */
                            tux();
                            break;
                           
                            case SDLK_u:
                            /* instruction de u */
                            tuxx();
                            break;
                           
                              case SDLK_ESCAPE:
                              //touche escape
                  quiter();
                  break;
     
                 
                  case SDLK_RETURN:
                              //touche entrer
                  quiter();
                  break;

                default:
                break;
             }//fin de switch touche
             

          default:
          break;
        }//fin du switch type evenement
       
       }//fin de la boucle evenement

       }//fin de la boucle infini


      return 0;
    } //fin de main


    //fonction qui initialise SDL
    int initialiser(void)
    {   
       // Initialisation de SDL
       if (SDL_Init (SDL_INIT_VIDEO) < 0)
       {
       fprintf (stderr, "Erreur d'initialisation de SDL: %s\n",
       SDL_GetError ());
       return 1;
       }
       
       atexit (SDL_Quit); // Pour quitter proprement
       
        Screen = SDL_SetVideoMode (640, 480, 16, SDL_SWSURFACE|SDL_DOUBLEBUF);
        SDL_ShowCursor(0);   
           
          if (Screen == NULL)
          {
          fprintf (stderr, "Erreur d'initilaisation du mode video: %s\n",
          SDL_GetError ());
          return 2;
          }
       
    }

    //fonction pour tux X
    int tuxx(void)
    {
        dest.x=260;
        dest.y=260;
        dest.w=254;
        dest.h=300;
        //on charge une image
        perso = SDL_LoadBMP("tuxx.bmp");
       
       //si le chargement de limage a foire
       if ( perso == NULL )
       {
            fprintf(stderr, "Impossible de charger %s: %s\n", perso, SDL_GetError());
            return;
        }
       
    SDL_SetColorKey(perso,SDL_SRCCOLORKEY,SDL_MapRGB(perso->format,255,0,255) );
       
        // Affichage
            SDL_BlitSurface(perso, NULL, Screen, &dest);
           
        // Flip
        SDL_Flip(Screen);
     
    }

    //fonction pour tux
    int tux()
    {dest.x=160;
        dest.y=160;
        dest.w=254;
        dest.h=300;
        //on charge une image
        perso = SDL_LoadBMP("tux.bmp");
       
       //si le chargement de limage a foire
       if ( perso == NULL )
       {
            fprintf(stderr, "Impossible de charger %s: %s\n", perso, SDL_GetError());
            return;
        }
       

        SDL_SetColorKey(perso,SDL_SRCCOLORKEY,SDL_MapRGB(perso->format,255,0,255) );
        // Affichage
            SDL_BlitSurface(perso, NULL, Screen, &dest);
           
        // Flip
        SDL_Flip(Screen);
         
    }

    //fonction qui quite SDL
    int quiter(void)
    {
        SDL_FreeSurface(Screen);
        SDL_ShowCursor(1);
        SDL_Quit();
        exit(0);
            return 0;
    }



    et foici mon fichier prototype.h
    /*prototype des fonctions*/

    int initialiser(void);
    int action_utilisateur(void);
    int quiter(void);
    int tuxx(void);
    int tux(void);


    Merci de votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      13 janvier 2006 à 16:23:00

      tu peux ajouter une fonction qui efface l'écran juste avant la fonction tux()et tuxx()

      donc si ton fond est noir:
      SDL_FillRect(SCREEN, NULL, 0);
      • Partager sur Facebook
      • Partager sur Twitter
        13 janvier 2006 à 16:43:02

        Je crois me rappeler qu'il y a une fonction qui permet de rafraichir l'écran avec les nouvelles données à afficher... mais je me rappelle plus le nom...

        Et si tu affichais la première, que tu effacais le contenu de la mémoire la contenant juste après l'avoir affichée ?
        Comme ca, au prochain passage, donc prochain affichage d'une image, la précédente serait effacée ?
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          13 janvier 2006 à 18:17:33

          Merci ca marche !!
          • Partager sur Facebook
          • Partager sur Twitter

          SDL et écraser une frame

          × 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