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 ミリ秒の精度) ため、この方法で必要な 1 秒あたりのフレーム数を取得することはできません。代わりに vsync を使用してください。もう 1 つの問題は、コンソールが表示されている場合、stderr/stdout への出力が遅いことです。キーが押されたときに何かを印刷している場合、またはキーを押すと印刷されるテキストの量が何らかの形で増加する場合、ゲームは遅くなります。

于 2013-08-25T13:40:55.667 に答える