DXライブラリ 総合スレッド その3at GAMEDEVDXライブラリ 総合スレッド その3 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト547:名前は開発中のものです。 09/06/21 17:24:40 nC5CYBlY 無駄を減らすために main_loop()の処理時間が十分に短いなら A = GetTickCount(); while(1){ do { main_loop(); B = GetTickCount(); } while (B-A < 17); flip(); A = B; } あるいはタイマーを使うか… A = GetTickCount(); while(1){ main_loop(); B = GetTickCount(); SetTimer(17 - ((B - A) % 17), flip()); A = B; } それとも描画と計算は別スレッドにするか… 548:名前は開発中のものです。 09/06/21 20:10:23 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ならそのままでいいが、ゲームスピードだけは死守するのならフレームスキップ(コマ落ち)が必要になる。 この方法も色々あるので今回は割愛。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch