現在、Windows と Mac OS X の両方で動作するゲームを書いています。メインのゲーム ループは次のようになります。
while(running)
{
ProcessOSMessages(); // Using Peek/Translate message in Win32
// and nextEventMatchingMask in Cocoa
GameUpdate();
GameRender();
}
それは明らかに少し単純化されていますが、それがその要点です。アプリケーションを完全に制御できる Windows では、うまく機能します。残念ながら、Apple には Cocoa アプリで独自の方法があります。
Cocoa で最初にメイン ループを実装しようとしたとき、どこに配置すればよいかわからなかったので、この投稿NSApplication
に従って独自のループを作成しました。私は自分の機能に自分の権利を投げかけ、すべてが正しく機能しました。GameFrame()
run
しかし、それが「正しい」方法だとは思いません。機能するソリューションをハッキングしようとするのではなく、Apple のエコシステム内でうまく遊びたいと思っています。
Apple のこの記事では、 を使用した古い方法と、 をNSTimer
使用した「新しい」方法について説明していCVDisplayLink
ます。私はCVDisplayLink
バージョンを接続しましたが、それはただ....奇妙に感じます. ゲームがディスプレイによって駆動されるという考えは好きではなく、その逆ではありません。
CVDisplayLink
a を使用するか、自分のものを上書きするオプションは 2 つだけNSApplication
ですか? これらの解決策のいずれも、まったく正しくないと感じています。