每次循環運行時,czas都會更新爲當前時間。 解決方案:將其移出循環。
int czas = SDL_GetTicks();
while(1)
{
int tajmer;
tajmer = SDL_GetTicks() - czas;
if(tajmer > 1000)
{
MoveUp();
czas = SDL_GetTicks();
}
}
你要完成可能會以更好的方式來完成使用內置的定時器,但是什麼: http://wiki.libsdl.org/SDL_AddTimer
編輯:使用SDL_AddTimer
例。
Uint32 my_callbackfunc(Uint32 interval, void *param);
int main() {
... // don't forget to SDL_Init
...
SDL_AddTimer(1000, my_callbackfunc, NULL);
...
}
Uint32 my_callbackfunc(Uint32 interval, void *param)
{
MoveUp();
return(1000); // or however long to wait before my_callbackfunc should run.
}
如果您正在使用的類和要調用一個類的方法被稱爲上移(),則可能是:
class example {
...
void start_moving() {
SDL_AddTimer(1000, my_callbackfunc, (void*)this);
}
...
public void MoveUp() {
...
}
}
Uint32 my_callbackfunc(Uint32 interval, void *param) {
((example*)param)->MoveUp();
return (1000);
}
感謝您的回答。事實上,你的解決方案不起作用,它仍然崩潰; D這不是問題,因爲Bozemoto的方式似乎正在工作(當然,並非如我所料,但仍然; D)。 順便說一句:我聽說過SDL_AddTimer,甚至試圖使用它,但我想我太愚蠢了,所以這是我的要求:你能告訴我如何使用計時器1秒後「MoveUp()」? :D – Romen