C# C# C♯ でゲームを作ろう Part1

このエントリーをはてなブックマークに追加
31名前は開発中のものです。
C#でメインループってどうやって作るの?
Timer?それともメッセージループあるの?
32名前は開発中のものです。:2008/06/21(土) 22:53:02 ID:JUrwHwGu
while(form.Created)
{
 更新();
 描画();
 Application.DoEvents();
}
33名前は開発中のものです。:2008/06/21(土) 22:53:44 ID:GzbfVCZH
System.Diagnostics のStopwatchクラス。どっかの十分精度の出るやつのラッパーらしい。

staticメンバで、インスタンス生成+一括初期化のStartNew()で一行で初期化できるし、
(double)インスタンス.ElapsedTicks / Stopwatch.Frequencyで、↑してからの経過時間(秒)が分かる。
34名前は開発中のものです。:2008/06/21(土) 23:05:50 ID:JUrwHwGu
ループを直接書かずにこんな感じでApplication.Idleイベントを使う方法もあるみたい
Application.Idle += (sender, e) => {
 while (!NativeMethods.PeekMessage(out msg, IntPtr.Zero, 0, 0, 0))//DllImportしてくる
  描画や更新やウェイト();
 }
Application.Run(form);
XNAなんかだとこっちになってるからこっちの方がいいのかも
35名前は開発中のものです。:2008/06/21(土) 23:06:27 ID:TsDwEFxY
>>31
Application.Idleイベント内でウィンドウメッセージの有無を
P/InvokeのPeekMessageで判断しつつメインループ呼び出し、とか。

Application.DoEventsメソッドはGC引き起こすからってSDKサンプルは
この実装に変更されたんだけど、.NET2.0以降のWinFormsは
DoEventsが改善されてどっちでもよくなった気がする。