Multiple Blit.

Charger une fois l'image, la blitter autant qu'on le souhaite.

SDL_LoadBMP,SDL_BlitSurface

Voir version :

Dépendances (dans l'archive) :
homer.bmp

Télécharger :

#include <sdl/sdl.h>

#pragma comment(lib,"sdl.lib")
#pragma comment(lib,"sdlmain.lib")

SDL_Surface* Charger(const char* fic)
{
    SDL_Surface* res = SDL_LoadBMP(fic);
    if (res==NULL)
    {
        printf("Erreur chargement %s\n",fic);
        exit(-1);
    }
    return res;
}

int KeyHit()
{
    SDL_Event e;
    if (SDL_PollEvent(&e))
        if (e.type == SDL_KEYDOWN)
            return 1;
    return 0;
}

int main(int argc,char** argv)
{
    SDL_Surface* homer,*screen;
    SDL_Init(SDL_INIT_VIDEO);
    screen=SDL_SetVideoMode(800,600,32,SDL_SWSURFACE|SDL_DOUBLEBUF);  
    homer=Charger("homer.bmp");
    SDL_SetColorKey(homer,SDL_SRCCOLORKEY ,SDL_MapRGBA(homer->format,255,0,255,0));
    while(!KeyHit())
    {
        SDL_Rect R;
        R.x = rand()%800;
        R.y = rand()%600;
        SDL_BlitSurface(homer,NULL,screen,&R);
        SDL_Flip(screen);
    }
    SDL_FreeSurface(homer);
    SDL_Quit();
    return 0;
}



Commentaires


	Un petit exemple pour montrer qu'on peut, une fois une image chargée, la blitter autant de fois qu'on le souhaite.

	Un piège classique est de charger une image dans la boucle principale (donc à chaque itération !) et de la blitter.
	Cela met le disque dur à rude épreuve d'une part, et crée des ralentissements d'autre part.
	Il arrive même que certaines personnes ne libèrent pas les images qu'elles rechargent à chaque fois dans la boucle
	principale : cela entraine une montée de mémoire jusqu'à faire ramer le système, ou au plantage de leur programme.

	Expliquons rapidement ce programme :
	Je charge une fois pour toutes l'image Homer. Je dis que sa colorkey est le violet (255,0,255)

	Puis je la blit en boucle dans le while, tout simplement...
	Chargée une fois, blittée plein de fois.

	J'ai fait deux petites fonctions :
	- Charger, ça charge une image, et quitte avec un message d'erreur explicite si le chargement a échoué, car
	  il faut toujours tester ses retours de chargement.

	- KeyHit, dit si oui ou non on a appuyé sur une touche. Se comprend facilement.

Laissez un commentaire / post a comment