Partage
  • Partager sur Facebook
  • Partager sur Twitter

effacement d'un sprite non desire

a cause du blit ?

Sujet résolu
    13 août 2006 à 17:59:57

    salut,
    donc voila je m'acharne
    j'ai refais un prog,ou une balle traverse l'ecran aller/retour et ou le fond bouge en aller/retour aussi,jusque la aucun probleme
    ensuite j'ai rajoute une seconde balle un peu plus loin qui se decouvre l'orsque la deuxieme balle arrive vers sa position,mais encore un probleme de blit ?;la seconde balle s'efface.
    j'ai blitter la seconde balle sur la map mais si je blit la map en dernier,je ne vois pas les balles.
    Image utilisateur

    ]#include <SDL/SDL.h>

    int main(int argc ,char **argv)
    {
       SDL_Surface *screen;
       SDL_Surface *fond;
       SDL_Surface *balle;
       SDL_Surface *balle2;
       SDL_Event event;   
     
     int continuer = 1,aller=0;
     
      SDL_Init(SDL_INIT_VIDEO);
      SDL_WM_SetCaption("Toujours des tests...",NULL);
      screen = SDL_SetVideoMode(600, 400, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);

      fond=SDL_LoadBMP("image.bmp");
      SDL_Rect posfond;
      posfond.x=0;
      posfond.y=0;
      posfond.w=500;
      posfond.h=400;
      SDL_BlitSurface(fond,NULL,screen,&posfond);
      SDL_Flip(screen);
     
      SDL_ShowCursor(0);
     
      balle=SDL_LoadBMP("balle.bmp");
      SDL_Rect posbal;
      posbal.x=0;
      posbal.y=200;
      SDL_SetColorKey(balle,SDL_SRCCOLORKEY,SDL_MapRGB(balle->format,255,0,255));
       
      balle2=SDL_LoadBMP("balle.bmp");
      SDL_Rect posbal2;
      posbal2.x=500;
      posbal2.y=-400;
      SDL_SetColorKey(balle2,SDL_SRCCOLORKEY,SDL_MapRGB(balle2->format,255,0,255));
       
        while (continuer)
    {   
       
        SDL_PollEvent(&event);                           
        switch(event.type)
        {
                     
            case SDL_QUIT:
                continuer = 0;
            break;
            case SDL_KEYDOWN:
            switch (event.key.keysym.sym)
            {
                  case SDLK_ESCAPE:
            continuer = 0;
            break;     
           
            }
            break;
        }
       
                    posbal.x+=aller;   
                    posfond.x+=aller;
                    if (posbal.x<10) aller=1;
                    if (posbal.x>400) aller=-1;
                   
       
        SDL_BlitSurface(fond,&posfond,screen,NULL);
        SDL_BlitSurface(balle2,&posfond,screen,&posbal2);
        SDL_BlitSurface(balle,NULL,screen,&posbal);
        SDL_Flip(screen);
    }
        SDL_ShowCursor(1);    // reactive la souris
        SDL_FreeSurface(fond);
        SDL_FreeSurface(balle);
        SDL_FreeSurface(balle2);
        SDL_Quit();    // quitte SDL
            return 0;                            // quitte le programme
    }

    • Partager sur Facebook
    • Partager sur Twitter
      15 août 2006 à 12:48:13

      j'ai modofie mon code mais decidementje n'y arrive pas
      #include <SDL/SDL.h>



      int main(int argc ,char **argv)
      {
         SDL_Surface *screen;
         SDL_Surface *fond;
         SDL_Surface *balle;
         SDL_Surface *balle2;
         SDL_Event event;   
       
       int continuer = 1,aller=0;
       

        SDL_Init(SDL_INIT_VIDEO);
        if (SDL_Init(SDL_INIT_VIDEO) == -1)
          {
              fprintf(stderr, "Erreur lors de l'initialisation de la SDL : %s\n", SDL_GetError());
              return EXIT_FAILURE;
          }
         
        SDL_WM_SetCaption("Toujours des tests...",NULL);
        screen = SDL_SetVideoMode(600, 300, 32, SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_FULLSCREEN);
        if(screen==NULL)
        {
              fprintf(stderr, "Erreur lors de la creation de la surface screen : %s\n", SDL_GetError());
              return EXIT_FAILURE;
        }
       
        SDL_Rect posfond;
        fond=SDL_LoadBMP("image.bmp");
        if(fond==NULL)
                 {
                 fprintf(stderr,"Erreur dans le chargement de image.bmp\n");
                 return EXIT_FAILURE;
                 }
          posfond.x=0;
              posfond.y=0;
              posfond.w=fond->w;
              posfond.h=fond->h;
              SDL_BlitSurface(fond,NULL,screen,&posfond);
              SDL_Flip(screen);
       
        SDL_ShowCursor(0);
       
        balle=SDL_LoadBMP("balle.bmp");
        if(balle==NULL)
                 {
                 fprintf(stderr,"Erreur dans le chargement de image.bmp\n");
                 return EXIT_FAILURE;
                 }

        SDL_Rect posbal;
        posbal.x=0;
        posbal.y=100;
        SDL_SetColorKey(balle,SDL_SRCCOLORKEY,SDL_MapRGB(balle->format,255,0,255));
         
         
         
        balle2=balle;
        SDL_Rect posbal2;
        posbal2.x=100;
       posbal2.y=200;
        SDL_SetColorKey(balle2,SDL_SRCCOLORKEY,SDL_MapRGB(balle2->format,255,0,255));
        SDL_BlitSurface(balle2,&posfond,screen,&posbal2);
        SDL_Flip(screen);
       
        SDL_Rect depposbal2;  //je crois pas que ce soit ca
        depposbal2.x=500;
        depposbal2.y=0;
       
       
          while (continuer)
      {   
         
          SDL_PollEvent(&event);                           
          switch(event.type)
          {
                       
              case SDL_QUIT:
                  continuer = 0;
              break;
             
              case SDL_KEYDOWN:
              switch (event.key.keysym.sym)
              {
                    case SDLK_ESCAPE:
              continuer = 0;
              break
             
                default:
              break;
             
              }
              break;
          }
         
                      posbal.x+=aller;   
                      posfond.x+=aller;
                      if (posbal.x<10) aller=1;
                      if (posbal.x>400) aller=-1;
                     
             /*On veut que la balle 2 soit toujours au meme endroit par
                      rapport au fond...*/

                      posbal2.x = posfond.x+depposbal2.x;
                      posbal2.y = depposbal2.y;
                     
                      /*On met l'ecran en noir*/
                      SDL_FillRect(screen,NULL,0);
                      /*On dessine le fond*/
                      SDL_BlitSurface(fond,&posfond,screen,NULL);
                      SDL_BlitSurface(balle2,NULL,screen,&posbal2);
                      SDL_BlitSurface(balle,NULL,screen,&posbal);
                      SDL_Flip(screen);
      }
          SDL_ShowCursor(1);    // reactive la souris
          SDL_FreeSurface(fond); //on efface tout
          SDL_FreeSurface(balle);//     "
          SDL_FreeSurface(balle2);//     "
          SDL_Quit();    // quitte SDL
              return EXIT_SUCCESS;                // quitte le programme
      }


      images et codes source
      • Partager sur Facebook
      • Partager sur Twitter

      effacement d'un sprite non desire

      × 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