简单的 SDL_GetTimer() 用法 - 为什么它不起作用?
Simple SDL_GetTimer() usage - why isn't it working?
我尝试使用SDL_GetTimer()在通过这段代码传递1000ms后进行操作:
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);
}
继续 Yujin Wu 的回答,你也可以做这样的事情。
int timer = 0;
int ticks = SDL_GetTicks();
while(true)
{
timer += SDL_GetTicks() - ticks;
ticks = SDL_GetTicks();
if(timer >= 1000)
{
timer -= 1000;
MoveUp();
}
}
或类似的东西
const int DELAY = 1000;
int timer = SDL_GetTicks() + DELAY;
while(true)
{
if(timer - SDL_GetTicks() <= 0)
{
timer += DELAY;
MoveUp();
}
}
相关文章:
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 为什么二进制搜索在我的测试中不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 为什么这段代码不起作用,我该如何解决?
- 为什么 zlib 放气初始化调用一次不起作用?
- 为什么 ulimit -v 在 Clang 的地址清理器下不起作用?
- 为什么在 while 循环中返回表达式不起作用
- 为什么这些完全相似的代码不起作用?
- 为什么我的数组双精度函数不起作用?
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 自动点击器在游戏中 - 为什么不起作用?
- 像在 Python 中一样C++循环中的参数解析。为什么不起作用?
- 多维动态数组,为什么不起作用?
- 函数A调用函数B,反之亦然(为什么不起作用)
- C++二进制树构建为什么不起作用