Bonjour,
je viens de creer un petit programme censé reproduire une image qui rebondit de gauche à droite et de haut en bas. Mon programme marche au debut, puis deconne, mais je ne vois pas pourquoi. Pourriez-vous m'aider.
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>
Uint32 bougerImageDroite(Uint32 intervalle, void *parametre);
Uint32 bougerImageGauche(Uint32 intervalle, void *parametre);
Uint32 bougerImageBas(Uint32 intervalle, void *parametre);
Uint32 bougerImageHaut(Uint32 intervalle, void *parametre);
int main(int argc, char *argv[])
{
SDL_Surface *ecran = NULL, *image = NULL;
SDL_Rect positionImage;
SDL_Event event;
int continuer = 1;
SDL_TimerID timerD;
SDL_TimerID timerG;
SDL_TimerID timerH;
SDL_TimerID timerB;
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
SDL_WM_SetCaption("Essai", NULL);
image = SDL_LoadBMP("image.bmp");
SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(zozor->format, 0, 0, 255));
positionImage.x = image->w ;
positionImage.y = image->h ;
timerB = SDL_AddTimer(5, bougerImageBas, &positionImage);
timerD = SDL_AddTimer(5, bougerImageDroite, &positionImage);
while (continuer)
{
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT:
continuer = 0;
break;
}
if(positionImage.x + image->w == ecran->w) // aller à gauche
{
SDL_RemoveTimer(timerD);
timerG = SDL_AddTimer(20, bougerImageGauche, &positionImage);
}
if(positionImage.x + image->w == image->w) // aller à droite
{
SDL_RemoveTimer(timerG);
timerD = SDL_AddTimer(20, bougerImageDroite, &positionImage);
}
if(positionImage.y + image->h/2 == image->h) // aller en bas
{
SDL_RemoveTimer(timerH);
timerB = SDL_AddTimer(20, bougerImageBas, &positionImage);
}
if(positionImage.y + image->h == ecran->h ) // aller en haut
{
SDL_RemoveTimer(timerB);
timerH = SDL_AddTimer(20, bougerImageHaut, &positionImage);
}
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
SDL_BlitSurface(image, NULL, ecran, &positionImage);
SDL_Flip(ecran);
}
SDL_FreeSurface(image);
SDL_Quit();
return EXIT_SUCCESS;
}
Uint32 bougerImageDroite(Uint32 intervalle, void *parametre)
{
SDL_Rect* positionImage = parametre;
positionImage ->x++;
return intervalle;
}
Uint32 bougerImageGauche(Uint32 intervalle, void *parametre)
{
SDL_Rect* positionImage = parametre;
positionImage ->x--;
return intervalle;
}
Uint32 bougerImageHaut(Uint32 intervalle, void *parametre)
{
SDL_Rect* positionImage = parametre;
positionImage ->y--;
return intervalle;
}
Uint32 bougerImageBas(Uint32 intervalle, void *parametre)
{
SDL_Rect* positionImage = parametre;
positionImage ->y++;
return intervalle;
}