ISLeさんが公開してくださっている
「処理落ちしても一定のFPS制御」のロジックについての質問です。
http://isle.cocolog-nifty.com/blog/2011 ... -927b.html
もし、ここで質問することが不適切であればご指摘くださいm(__)m
また、私の知識や理解が未熟であるため、思い違いなどあるかもしれないのですが、
その場合もご指摘いただけると助かります。
isle.videogame.20120426(.zip)の
VGLibMain.cppの
run関数のFPS制御部分(69行目~104行目)についてなのですが、
【質問1】
まず、このFPS制御部分の流れとして以下のように解釈しているのですが正しいでしょうか?
1~58のそれぞれのフレームについて、
Step1 あるべき経過時間(disttime)を求め、
Step2 実際の経過時間と(pasttime)を求め、
Step3 disttimeとpasttimeの差分によって以下パターンで分岐
パターンA:垂直帰線期間より早く到達しまっている場合は、SleepでウェイトしてScreenFlipする
パターンB:垂直帰線期間より遅れて到達してしまっている場合は次の垂直帰線期間に間に合うタイミングまで待つ
【質問2】
おそらく、パターンBの待機のことを、スキップする(skipped_count ++)と表現されているのだと思うのですが、
ゲームプログラムなどで一般的に言われているフレームスキップ法というものはまた別物という認識であってますか?
(私は、更新処理のあと描画処理を1回分飛ばすことをフレームスキップというのかなと考えていました)
以下は、【質問3~5】となります。
77~81行目について
int passtime = GetNowCount() - lasttime;
if (passtime < 0 || skipped_count >= 8) {
lasttime += passtime - disttime;
passtime = disttime;
}
この条件の意味がわかりません。
【質問3】経過時間が0より小さくなるというのはどういうときにありえるのでしょうか?
【質問4】また、スキップ数が8以上とありますが、この8というのはどこからきたものでしょうか?
たとえば、1や100ではダメで、8でなければいけない理由というのがあるのでしょうか?
【質問5】条件がtrueになった場合に実施される処理の意味を教えてください。
89~90行目にも同じ処理があるのですが、どういう効果があるのかよくわかりません。
最新時間を実経過時間とあるべき経過時間の差分を埋めて…
lasttime += passtime - disttime;
実経過時間をあるべき経過時間で上書きしていることから…
passtime = disttime;
あるべき時間ぴったりに来たように振る舞わせるという意味になるのかと推測しています。
以上です。ISLeさんご本人でなくとも、ご教示してくださる方がいらっしゃると助かりますm(__)m