これは私のゲームループコードです:
while (shouldUpdate)
{
timeSinceLastUpdate = 0;
startTime = clock();
while (timeAccumulator >= timeDelta)
{
listener.handle();
em.update();
timeAccumulator -= timeDelta;
timeSinceLastUpdate += timeDelta;
}
rm.beginRender();
_x->draw();
rm.endRender();
timeAccumulator += clock() - startTime;
}
ほぼ完全に実行されますが、_x の代わりに 1 秒に数回 (更新で行うテスト エンティティは x++ だけです)、1 ピクセル右に移動し、実際には 2 ピクセル右に移動し、いくつかのジッターがあります。これは顕著なラグ/ジッター効果です。私は clock() が十分に正確ではないと推測しています。では、このゲーム ループを改善するにはどうすればよいでしょうか?
問題がある場合は、SDL と SDL_image を使用します。
編集:時計よりも正確なことをした後、何も変わりませんでした。しかし、私が理解したことは、すべて timeDelta のおかげだということです。これは、この投稿を作成したときに timeDelta が定義された方法です。
double timeDelta = 1000/60;
しかし、いじりながら別のものとして定義すると...
double timeDelta = 16.666666;
ゲームが始まって最初の数秒間、バターのようにスムーズだったことに気づきました。しかし、ほんの数秒後、ゲームは大きく途切れてからスムーズに戻り、そのようなことを繰り返しました. 追加した 6 の数 (または . の後の何か) が多いほど、ゲームは最初はスムーズでしたが、遅延が発生しにくくなりました。フローティングエラーが攻撃しているようです。それで、私は何ができますか?
EDIT2:私はあまりにも多くのことを試しましたが、今では面白くありません...誰かがループの数学の部分で私を助けてくれますか? それが原因なので・・・
編集 3: テスト プログラムを何人かの人に送りました。ここでテストしたい人は、(src): https://www.mediafire.com/?vfpy4phkdj97q9j
EDIT4:ソース コードへのリンクを変更しました。