1

わかりました、ゲーム ループを実行して適切なフレーム レートを維持するために、NSTimer 呼び出しの代わりに NSRunLoop を使用する方が良い考えである理由についての記事を読みました。

しかし、NSRunLoop を作成する場所については、どのディスカッションでも見ていませんでした。

didFinishLoading の最後に配置する必要がありますか?

4

2 に答える 2

2

を呼び出すと、実行ループが自動的に生成されます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)すべてのイベントが確実に処理されるようにします。

コードをそのまま使用してください。これは機能しています。

于 2009-05-28T16:23:56.887 に答える