Bonjour.
Dans le cadre d'un jeux nécessitant la pause de plusieurs bombes en même temps (et ainsi leur explosion a un interval précis),
et pour gérer cela on utilise des threads.
Cependant, lorsque l'ont pose plusieurs bombes, l'explosion se fait au niveau de la derniere bombe posé car les variables de positions gardent la dernière valeur prise lors de l'appui de la touche qui sert a poser la bombe.
Avez vous une idée pour faire en sorte que les variables de positions ne se reset pas a chaque appuis ?
Voici le morceau de code:
SDL_Surface *screen = NULL,*fondEcran = NULL;
SDL_Rect positionSalameche, position_explosion, positionPokeballRouge; // ne vous fiez pas au nom, c'est un bomberman personalisé
SDL_Thread *thread, *thread2, *thread3;
int my_thread( void *data ); //prototype du 1er thread
int my_thread( void *data ){
SDL_LockMutex(myMutex);
SDL_Surface *pokeballRouge, *explosion=NULL; //déclaration des surfaces pour la bombe
int my_thread2( void *data ); //prototype des 2 threads, pour effacer l'explosion
int my_thread3( void *data ); // et effacer la bombe
positionPokeballRouge.x = positionSalameche.x;
positionPokeballRouge.y = positionSalameche.y;
position_explosion.x = positionPokeballRouge.x;
position_explosion.y = positionPokeballRouge.y;
pokeballRouge = IMG_Load("Pokebomb_1.png");
explosion = IMG_Load("explosion.png");
SDL_BlitSurface(pokeballRouge, NULL, fondEcran, &positionPokeballRouge); //blittage de la pokeball sur le fondEcran
thread3 = SDL_CreateThread(my_thread3, NULL); //création du thread 3 qui efface la bombe après l'avoir déposé
SDL_Delay(3000); //on attend 3 secondes avant que l'explosion n'apparaisse
SDL_BlitSurface(explosion, NULL, screen, &position_explosion);
SDL_Flip(screen);
thread2 = SDL_CreateThread(my_thread2, NULL); // création du thread 2 pour effacer l'explosion
SDL_FreeSurface(pokeballRouge);
SDL_FreeSurface(explosion);
SDL_UnlockMutex(myMutex);
return 0;
}
Voila, ce sont les variables position_explosion et positionPokeballRouge qui se reset a chaque fois que l'ont lance le thread.
Une idée ?