Проблема с таймером обратного отсчета в C и SDL
Это часть кода, над которым я работал (я вырезал ненужные части). Дело в том, что у меня возникают проблемы с реализацией таймера обратного отсчета, который будет отображаться на экране благодаря SDL_TTF.
Все, что он отображает в данный момент, это какие-то странные символы (вероятно, являющиеся адресом). Я не могу найти, что не так с моим кодом, но я думаю, что это где-то в аргументах, которые я передаю функции обратного вызова "changerTemps" (я только начал использую таймеры и не очень знаком с процессом).
Заранее спасибо за помощь.
#define count_down_time_in_secs 2000
typedef struct timerStructure timerStructure;
struct timerStructure {
int compteurTimer;
char timerBuffer[20];
};
Uint32 changerTemps (Uint32 delay, void* paramPerso); // Est appellé par un timer SDL pour changer le timer avant de l'afficher
Uint32 changerTemps (Uint32 delay, void* paramPerso)
{
timerStructure* timerInfo= paramPerso; //Indique sur quoi pointe le void*
timerInfo->compteurTimer=(timerInfo->compteurTimer)-1;
sprintf(timerInfo->timerBuffer,"%d",timerInfo->compteurTimer);
}
int main(int argc,char** argv)
{
SDL_Rect positionTimer ;
SDL_Surface* screen;
SDL_Surface *texteTimer = NULL;
/*Timer*/
TTF_Font *policeTimer = NULL;
SDL_Color couleurNoire = {0, 0, 0};//Couleur pour la police (pas un UINT32)
SDL_TimerID timer; //Timer qui va servir au countdown
timerStructure timerInfo;
(timerInfo.compteurTimer)= count_down_time_in_secs;
void* paramPerso = &timerInfo;
Uint32 delay = 1000;
timer = SDL_AddTimer(delay,changerTemps,paramPerso); //Appelle changertemps toute les 1000 ms, passe en param timerInfo
memset(&in,0,sizeof(in));
SDL_Init(SDL_INIT_VIDEO |SDL_INIT_TIMER); // preapare SDL
TTF_Init(); //Démarre SDL TTF
SDL_WM_SetCaption("Les aventures du Makarov",NULL);//Pour l'écriture au dessus de la fenetre
screen = SDL_SetVideoMode(LARGEUR_FENETRE,HAUTEUR_FENETRE,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
/*Charger la police*/
policeTimer=TTF_OpenFont("blackcastle.ttf",20);
/*Initialise la position du timer sur le SDL_Screen*/
positionTimer.x = 5;
positionTimer.y = 5;
while(!in.key[SDLK_ESCAPE])
{
/*Ecriture du texte en mode blended dans la SDL_SURFACE */
texteTimer = TTF_RenderText_Blended(policeTimer,timerInfo.timerBuffer, couleurNoire);
SDL_BlitSurface(texteTimer, NULL, screen, &positionTimer); /* Blit du texte du timer */
SDL_Flip(screen);
SDL_Delay(5);
}
SDL_RemoveTimer(timer);//Stop le timer (libère cases mémoire)
TTF_Quit();//Quitte TTF
SDL_Quit(); //Quitte la SDL
return 0;
}