C和SDL中的倒数计时器有问题

时间:2015-05-10 14:49:33

标签: c timer callback sdl-ttf

这是我一直在研究的一些代码的一部分(我删除了不相关的部分)。 事实是,由于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;

}

0 个答案:

没有答案