Partage
  • Partager sur Facebook
  • Partager sur Twitter

clavier ou image

jai du faire une erreur

Sujet résolu
    8 juin 2006 à 20:51:19

    bonsoir/jour

    voila jai fait un simple programme qui est normalement fait pour que en apuyant sur "y" on voi la photo dans gars appelé yanis et sur "d" on voi la photo d'un gars appelé damien

    mais voila jai creer mon code C et cela de marche pas limage reste la meme o_O

    pouvez vous me trouvez mon erreur SVP

    code C :

    #ifdef __cplusplus
        #include <cstdlib>
    #else
        #include <stdlib.h>
    #endif
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>


    int main(int argc, char *argv[])
    {
        int continuer = 1;
        SDL_Surface *ecran = NULL,*menudefond = NULL;
        SDL_Rect positionmenu;
        SDL_Event event;
        positionmenu.x = 0;
        positionmenu.y = 0;


        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE);
        SDL_WM_SetCaption("Team TheWorldOfYanis", NULL);
        menudefond = SDL_LoadBMP("menu.bmp");;




        // Coloration de la surface ecran en bleu-vert
        SDL_BlitSurface(menudefond, NULL, ecran, &positionmenu);

        SDL_Flip(ecran); /* Mise à jour de l'écran avec sa nouvelle couleur */
        SDL_FreeSurface(menudefond); /* On libère la surface */

        while (continuer)
        {
            SDL_WaitEvent(&event); /* On attend un évènement qu'on récupère dans event */
            switch(event.type) /* On teste le type d'évènement */
            {
                case SDL_QUIT: /* Si c'est un évènement QUITTER */
                    continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
                    break;
                case SDL_KEYDOWN:
                switch (event.key.keysym.sym)
                {
                    case SDLK_y: /* Appui sur la touche Echap, on arrête le programme */
                        menudefond = SDL_LoadBMP("yanis.bmp");
                        break;
                    case SDLK_d:
                        menudefond = SDL_LoadBMP("damien.bmp");
                        break;
                }



                        break;
                }


            }



        SDL_Quit();

        return EXIT_SUCCESS;
    }


    voila merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      8 juin 2006 à 20:53:50

      Tu ne blit même pas ta surface dans ta boucle..
      • Partager sur Facebook
      • Partager sur Twitter
        8 juin 2006 à 20:57:05

        ok je croi avori compris en faite pendant que tu me repondez jai vut mon erreur ^^

        merci quand meme
        • Partager sur Facebook
        • Partager sur Twitter
          9 juin 2006 à 10:28:07

          Tu as oublier le Blit et le Flip... Jusque la on avait déjà repondu
          Mais je voulais rajouter quelque chose. La fonction SDL_LoadBMP envoi une image en format .bmp (donc non compressé) sur la memoire de ton ordinateur, et ensuite il faudra faire un Blit. Deux action dont une assez importante (SDL_LoadBMP). Pour ce programme il ne risuqe pas d'avoir trop de changement a par faire monté la memoire au fur et a mesure mais pour un programme plus gros... tu risque d'avoir des sousis.
          Pour cela je te conseil plutot de créer deux surfaces. Exemple :
          SDL_Surface *ecran = NULL,*menudefond = NULL;
          deviendrait :
          SDL_Surface *ecran = NULL,*yanis = NULL,*damien = NULL;


          Avant la boucle tu Blit chaque image sur sa surface.
          Et le reste est identique, le seul changement sera dans les conditions qui sont dans la boucle au lieu d'avoir :
              while (continuer)
              {
                  SDL_WaitEvent(&event); /* On attend un évènement qu'on récupère dans event */
                  switch(event.type) /* On teste le type d'évènement */
                  {
                      case SDL_QUIT: /* Si c'est un évènement QUITTER */
                          continuer = 0; /* On met le booléen à 0, donc la boucle va s'arrêter */
                          break;
                      case SDL_KEYDOWN:
                      switch (event.key.keysym.sym)
                      {
                          case SDLK_y: /* Appui sur la touche Echap, on arrête le programme */
                              menudefond = SDL_LoadBMP("yanis.bmp");
                              break;
                          case SDLK_d:
                              menudefond = SDL_LoadBMP("damien.bmp");
                              break;
                      }



                              break;
                      }
                  SDL_BlitSurface(menudefond, NULL, ecran, &positionmenu);     
                  SDL_Flip(ecran);
                  }


          Tu aurais :
              while (continuer)
              {
                  SDL_WaitEvent(&event); // On attend un évènement qu'on récupère dans event
                  switch(event.type) // On teste le type d'évènement
                  {
                      case SDL_QUIT: // Si c'est un évènement QUITTER
                          continuer = 0; // On met le booléen à 0, donc la boucle va s'arrêter
                          break;
                      case SDL_KEYDOWN:
                      switch (event.key.keysym.sym)
                      {
                          case SDLK_y: // Appui sur la touche Echap, on arrête le programme
                              SDL_BlitSurface(yanis, NULL, ecran, &positionmenu);
                              break;
                          case SDLK_d:
                              SDL_BlitSurface(damien, NULL, ecran, &positionmenu);
                              break;
                      }



                              break;
                      }     
                  SDL_Flip(ecran);
                  }


          Voilà maintenant tu n'as plus de chargement d'image a chaque boucle.
          Ps : code non testé si il y a une erreur prévenez moi.
          • Partager sur Facebook
          • Partager sur Twitter

          clavier ou image

          × 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