Salut, cela fait quelque temp que j´essaie de mettre une animation en c++ en screensaver(économiseur d´écran, j´écris ici car je sais qu´il y a beaucoup de spécialiste en c++( car mon topic ne précisait pas c++, le voici pour plus d´info https://www.jeuxvideo.com/forums/1-31-8365644-1-0-1-0-0.htm )
. Je l´ai fait avec SDL, mais quand je le change en mon . exe en . scr et que je clique à droite puis installer, le screensaver ne fonctionne pas, j´ai seulement un fond noir, pourquoi que dois-je faire(pour plus d´info https://www.jeuxvideo.com/forums/1-31-8365644-1-0-1-0-0.htm )
. Voici mon code source http://img11.exs.cx/img11/2457/32sprites3uk.png ( chnager la en bmp)):
- include < stdio.h>
- include < stdlib.h>
- include < SDL/SDL.h>
SDL_Surface *screen;
class sprite
{
public:
int nombre; / / chiffre à afficher
int vitesse; / / vitesse
int next; / / temps du prochain changement
static int total; / / nombre de chifrre
static SDL_Surface *ima;
SDL_Rect r,d;
sprite(int time); / / constructeur
void actusprite(int &) / / regarde si on doit chager d´étape
{
if(time > next)
{
next= time +vitesse;
nombre++;
if(nombre>10)
nombre=0;
r.x=nombre*32;
}
}
};
int sprite::total=0; / / déclare les membre static de sprite
SDL_Surface *sprite::ima =SDL_CreateRGBSurface(SDL_HWSURFACE, 800, 600, 32, 0, 0, 0, 0);
sprite::sprite(int time=SDL_GetTicks())
{
int temp=0;
nombre=0; / / organise chaque sprite
vitesse=(rand()%2000)+200;
next=time;
r.x=nombre*32; / / surface de départ
r.y=0;
r.w=32;
r.h=32;
d.x = ( total%25)*32; / / surface d´arriver
d.y=(total/25)*32;
d.h=32;
d.w=32;
total++;
}
void initsdl() / / initialise la sdl
{
if(SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)<0)
{
printf("SDL can´t init %s" , SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
SDL_ShowCursor(0);
screen
=SDL_SetVideoMode(800,600,32,SDL_FULLSCREEN|SDL_HW
SURFACE|SDL_DOUBLEBUF);
if(screen==NULL)
{
printf("Can´t set video mode %s", SDL_GetError());
exit(2);
}
sprite::ima= SDL_LoadBMP("32sprites.bmp");
}
int main(int argc, char* argv[])
{
SDL_Event event;
bool done =true;
initsdl();
int i;
srand(SDL_GetTicks()); / / nombre aléatoire
int time;
sprite chiffre[476];// tout les nombre
while(done==true)
{
time=SDL_GetTicks(); / / réorganise les sprite à la bonne étape
for(i=0;i<476;i++)
{
chiffre[i].actusprite(time);
}
SDL_PollEvent(&); / / attend une touche
if(event.type==SDL_KEYDOWN ) break;
for(i=0;i<476;i++)
{
SDL_BlitSurface(sprite::ima, &[i].r, screen , &[i].d);
}
SDL_Flip(screen);
}
return 0;
}