ゲームを作成していますが、パフォーマンスを向上させるために、ゲーム ロジック コードとレンダリング コードを別のスレッドで実行したいと考えています。しかし、私の人生ではCADisplayLink
、生成されたスレッドで a を実行する方法がわかりません。現在NSThread
、マルチスレッドに使用しています。について読んだことNSOperationQue
がありますが、よくわかりません。誰かが私を正しい方向に向けることができますか? これは私が現在使用しているコードで、-logicLoop
両方-animationLoop
とも別のスレッドで実行されているため、別の実行ループが発生し、CADisplayLinks が別のスレッドにあると考えました。
-(void)logicLoop {
NSLog(@"adding");
logicTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(updateModel)];
logicTimer.frameInterval = kFrameInterval;
[logicTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
-(void)animationLoop {
NSLog(@"animation");
animationTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(renderScene)];
animationTimer.frameInterval = kFrameInterval;
[animationTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
何か案は?
これには を使用する必要がありNSOperationQue
ますか? もしそうなら、どうすればいいですか?私が本当に必要としているのは、ゲーム ループとアニメーション ループを別々のスレッドで実行する効率的な方法です。これにより、互いに速度が低下せず、ゲーム プレイがよりスムーズに表示されます。
ありがとうございました!