わかりました、ゲーム ループを実行して適切なフレーム レートを維持するために、NSTimer 呼び出しの代わりに NSRunLoop を使用する方が良い考えである理由についての記事を読みました。
しかし、NSRunLoop を作成する場所については、どのディスカッションでも見ていませんでした。
didFinishLoading の最後に配置する必要がありますか?
を呼び出すと、実行ループが自動的に生成されますNSApplicationMain
。次のいずれかの方法で実行ループにアクセスできます。
runloop = [NSRunLoop mainRunLoop];
runloop = [NSRunLoop currentRunLoop];
リンク先のフォーラムのコードは次のようになります。
// Yield to system calls (touches, etc.) for one ms.
while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, NO) == kCFRunLoopRunHandledSource);
に関するドキュメントCFRunLoopRunInMode
:
SInt32 CFRunLoopRunInMode ( CFStringRef モード、 CFTimeInterval 秒、 ブール値 returnAfterSourceHandled );現在のスレッドの CFRunLoop オブジェクトを特定のモードで実行します。
パラメーター
モード
実行する実行ループ モード。…</p>
秒
実行ループを実行する時間の長さ。…</p>
returnAfterSourceHandled
1 つのソースの処理後に実行ループを終了するかどうかを示すフラグ。…</p>
これはCFRunLoopRunInMode
、現在のスレッドの実行ループを取得し、待機中のすべての入力を処理することを意味します。(タッチのように…)。
while(… == kCFRunLoopRunHandledSource)
すべてのイベントが確実に処理されるようにします。
コードをそのまま使用してください。これは機能しています。