- 548 名前:名前は開発中のものです。 mailto:sage [2009/06/21(日) 20:10:23 ID:SurdRKYg]
- >>541
そうとは限らないよ。 まず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ならそのままでいいが、ゲームスピードだけは死守するのならフレームスキップ(コマ落ち)が必要になる。 この方法も色々あるので今回は割愛。
|

|