DXライブラリ 総合スレッド その3
■ このスレッドは過去ログ倉庫に格納されています
0548名前は開発中のものです。
2009/06/21(日) 20:10:23ID:SurdRKYgそうとは限らないよ。
まずfps制限と描画を完全にわけて考える。
fps制限は60に設定したとする。
int nowtime = GetNowCount();
static int oldtime = 0;
static int frametime = 1000 / 60;
int diftime = nowtime - oldtime;
while(1)
{
if(diftime >= frametime)
{
oldtime = nowtime;
break;
}
else
{
Sleep(1);
nowtime = GetNowCount();
diftime = nowtime - oldtime;
}
}
これで垂直同期しようがしまいが60で固定された。
1ループで1フレーム1/60秒が保障されたので、1秒で100ドットキャラを進ませたいのなら、60フレームで100ドット進ませればおk
5秒後に何かをしたいときも、5秒をタイマーで計測するんじゃなくて300フレーム後に行えばおk
だから>>539で「ゲームが基準にするのはタイマーじゃなく、一定間隔が保障されてるフレームを基準にすればおk」と書いた。
ただ、これだとスペック不足によって60fpsが出ない場合や、リフレッシュレートが60以外でかつ垂直同期を待った場合中途半端な同期によって60fpsが出ない場合(これは垂直同期を待たない事で解決出来る)、
フレームがゲームスピードの基準になっているのでゲームスピードが遅くなってしまう。(処理落ち)
これはこれでおkならそのままでいいが、ゲームスピードだけは死守するのならフレームスキップ(コマ落ち)が必要になる。
この方法も色々あるので今回は割愛。
■ このスレッドは過去ログ倉庫に格納されています