按住键时C ++ SDL帧率下降

时间:2013-08-25 02:47:39

标签: c++ sdl frame-rate

我正在尝试在C ++和SDL2中制作一个简单的基于tile的平台游戏。我的帧速率保持在59-60 fps,但是当我开始按住一个键时,它会损失大约10 fps。即使我没有调用更新或检索密钥状态,也会发生这种情况。这是我游戏循环中的代码:

//keys = (Uint8 *)SDL_GetKeyboardState(NULL);
elapsed = SDL_GetTicks() - current;
current += elapsed;
timeSinceSecond += elapsed;
//update(keys, elapsed / 1000.0);
draw();
frames++;

if(timeSinceSecond >= 1000) {
    timeSinceSecond = 0;
    cout << frames << endl;
    frames = 0;
}

next = SDL_GetTicks();
if(next - current < 1000.0 / framerate) {
    SDL_Delay(1000.0 / framerate - (next - current));
}

有关为何发生这种情况的任何想法?这可能是SDL2的问题吗?我没有尝试使用SDL 1.2。

1 个答案:

答案 0 :(得分:1)

SDL_Delay无法以您想要的方式运行。它不够精确(精度为10毫秒),因此以这种方式每秒获得所需的帧数是不可能的。我们反过来vsync。另一件事是当控制台可见时,打印到stderr / stdout很慢。如果您在按下按键时正在打印某些内容,或者如果按键会以某种方式增加正在打印的文本数量,则游戏速度会变慢。