ゲームループについて

 Windowsにおける、リアルタイムアクションゲームのメインループのあるべき姿について方々で調べたところ、システムのタイマーを使うのではなく、ループを自分で作ってしまうアプローチが妥当というか、ポピュラーなようだ。これはGDI、OpenGLDirect3Dのいずれを使うかによらず、そうなのである。VC++2005/2008で、WindowsFormアプリケーションを作成すると、main 関数の中に、Application::Run と記述された行が出来るが、この1行を以下のコードで置換する。

Form1^ form1 = gcnew Form1();
form1->Show();
int ot = System::Environment::TickCount;
while( form1->Created ){
 if( System::Environment::TickCount > ot+10 ){// マジック★ナンバー!
  ot = System::Environment::TickCount;
  form1->Invalidate();
  Application::DoEvents();
 }
}

以上のコードで、手もとの環境(GeForce4Ti4600)で、約64FPSの描画ループが実現する。この64FPSとは、FRAPSで測定した数値である。(なんと手抜きな…^^;)System.Timers.Timer なんて持ち出す必要は全くない。タイマーなんて使う必要は全くないのである。(ちなみに、System.Timers.Timerで、30ms毎にInvalidate() を呼び出すようにしても、同じく32FPSの描画ループを実現したりすることができる。)