0

我正在尝试用 C++ 和 SDL2 制作一个简单的基于图块的平台游戏。我的帧率保持在 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 尝试过这个。

4

1 回答 1

2

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

于 2013-08-25T13:40:55.667 回答