フレームスキップについて
Posted: 2012年10月23日(火) 17:49
龍神録プログラミングの館の「きっちりFPSを制御してみよう」
のページにあるコードを使っているのですが、
内部の処理が間に合わなかった時に
動作がもたもたしてしまうので、
そうなったときは描画をせずに当たり判定などの処理だけやって
次のループで描画のような フレームスキップを行いたいのですが
どのようなコードを書けばいいのでしょうか。
のページにあるコードを使っているのですが、
内部の処理が間に合わなかった時に
動作がもたもたしてしまうので、
そうなったときは描画をせずに当たり判定などの処理だけやって
次のループで描画のような フレームスキップを行いたいのですが
どのようなコードを書けばいいのでしょうか。
//FLAME fps になるようにfpsを計算・制御
void fps_wait(){
int term,i,gnt;
static int t=0;
if(fps_count==0){//60フレームの1回目なら
if(t==0)//完全に最初ならまたない
term=0;
else//前回記録した時間を元に計算
term=count0t+1000-GetNowCount();
}
else //待つべき時間=現在あるべき時刻-現在の時刻
term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();
if(term>0)//待つべき時間だけ待つ
Sleep(term);
gnt=GetNowCount();
if(fps_count==0)//60フレームに1度基準を作る
count0t=gnt;
f[fps_count]=gnt-t;//1周した時間を記録
t=gnt;
//平均計算
if(fps_count==FLAME-1){
ave=0;
for(i=0;i<FLAME;i++)
ave+=f[i];
ave/=FLAME;
}
fps_count = (++fps_count)%FLAME ;
}