我尝试使用 SDL_GetTimer() 在使用这段代码经过 1000 毫秒后执行操作:
while(1)
{
int tajmer;
int czas = SDL_GetTicks();
tajmer = SDL_GetTicks() - czas;
if(tajmer > 1000)
{
MoveUp();
czas = SDL_GetTicks();
}
}
但这会导致我的程序崩溃。为什么或如何正确实现简单计时器有什么想法吗?
最佳答案
每次循环运行时,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.
}
如果您当前正在使用类并想调用类的名为 MoveUp() 的方法,那么也许:
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);
}
关于c++ - 简单的 SDL_GetTimer() 用法 - 为什么它不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19616258/