すべてのWindowsアプリケーションは、その中核に、このようになりますループを持っています
BOOL bRet;
while((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
if (bRet == -1)
{
// handle the error and possibly exit
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
それはアプリケーションの仕事です - いないオペレーティングsystem's - メッセージがディスパッチされることを保証するために。
初期のWindowsゲームでは、ブロックGetMessage
の機能を呼び出す代わりにPeekMessage
を呼び出し、処理するメッセージがなければゲームのメイン処理ループを呼び出す別の方法が使用されていました。 100%CPUを使用せずに適切なフレームレートを得るために、さまざまな形式の遅延が使用されていました。滑らかなフレームレートを与えるのに十分なタイマーがなかっただけです。
今日では、DoEvents
を呼び出すループを明示的に記述する必要はありません。現在、によって.NETに公開され、System.Timers.Timer
でラップされた組み込みタイマープールタイマーを使用してスムーズなフレームレートを得るために、がになる可能性があります。
思い出したように、タイムリーにマウスイベントやキーボードイベントを取得する問題もありました。メッセージループは遅すぎることが多く、情報を失うことがあるため、メッセージループに依存するのではなく、直接キーボードとマウスのアクセスを使用しました。
私は何年もの間ゲームを書いていませんし、.NETがゲームプラットフォームのようなものかどうかはわかりません。入力がまだ問題である可能性があります。つまり、メッセージキューは、ゲーム開発者が望むような俊敏な応答を与えるだけの速度ではありません。したがって、重要な作業のためにメッセージキューをバイパスします。
私はgamelogicダニを呼び出すためにマルチメディアタイマを使用Win32で
ええ、ゲームがOSサービスではないという重要な違いはありません。 – Hejazzman