c++ - 简单的 SDL_GetTimer() 用法 - 为什么它不起作用?

标签 c++ timer sdl

我尝试使用 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/

相关文章:

c++ - 关于成员函数指针的使用(和有用性)与直接调用成员函数

c - STM32 使用定时器闪烁 LED

android - 如何在应用程序中添加计时器

c++ - SDL 和 GLFW 每次轮询仅报告一个键(重复),即使同时按下多个键也是如此

python - 运行时错误 : could not find any library for SDL2_ttf

c++ - 如何在混合语言应用程序中创建堆?

c++ - WT 保存文件对话框窗口?

c++ - 标准是否防止在可变参数模板中缩小具有足够小的文字值的文字转换

Java 计时器幻灯片

c++ - SDL C++ TTF 一段时间后随机消失(并且不会回来)