現在、私は1秒あたりのフレーム数を制限したいゲームを作っていますが、問題があります。C言語でのFPS制限
を、私は、各フレームを実行され、この方法でdeltaTimeを取得しています:
void Time::calc_deltaTime() {
double currentFrame = glfwGetTime();
deltaTime = currentFrame - lastFrame;
lastFrame = currentFrame;
}
deltaTimeは0.016に.... 0.012周り(私は期待値を持っているここで私がやってんですよ...)
よりも私はこのようなスリープ窓関数を介してフレームを遅らせるためにdeltaTimeを使用しています:
void Time::limitToMAXFPS() {
if(1.0/MAXFPS > deltaTime)
Sleep((1.0/MAXFPS - deltaTime) * 1000.0);
}
MAXFPSが60に等しく、私はセコを変換するために1,000を掛けていますnds〜ミリ秒。
void Time::limitToMAXFPS() {
double diff = 1.0/MAXFPS - deltaTime;
if(diff > 0) {
double t = glfwGetTime();
while(glfwGetTime() - t < diff) { }
}
}
しかし、それでもまだ、私はより多くを取得しています:すべてが正しいようだけど、私は60以上のfps(私は周りに72 FPSを取得しています)
私もループしながら使用して、この方法を試してみましたが敷居抱えています60 fps、まだ約72 fpsになっています...私は何か間違っているのですか、これを行うにはよりよい方法がありますか?
現在のfpsはどのように計算されますか? – SingerOfTheFall
私は個人的に、 'Sleep(1000/MAXFPS - deltaTime * 1000)'のような 'Sleep'式を書いていますが、それほど違った動作をしてはいけません。 –
@AlgirdasPreidžius: 'MAXFPS'が整数型の場合はどうなりますか? – IInspectable