ゲームロジックとレンダリングを2つのループに分けたいと思っています。なぜなら、fpsでゲームの速度を制御したくないからです。レンダリング用のCADisplayLinkとゲームロジック用のNSTimerを作成してこれを達成しようとしました。しかし、奇妙なことが起こった:
場合によっては(15回のアプリケーション実行のうち1回)、ゲームは非常に低いfps(約5-10)で実行されますが、それ以外の時間は完全にスムーズです。ゲームロジックのNSTimerを削除して2つのループを結合すると、fpsは一貫して高くなりますが、明らかに許容できる解決策ではありません。だから、時には2人のタイマーが「お互いに遅れている」というようなことがあるように見えますが、私はランルーループの内部作業を完全には理解していません。
タイマーとディスプレイリンクを作成する方法は次のとおりです。
NSTimer *gameTimer = [[NSTimer alloc] initWithFireDate:[NSDate date] interval:1.0/60.0 target:self selector:@selector(gameTimerFired:) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:gameTimer forMode:NSDefaultRunLoopMode];
[gameTimer release];
CADisplayLink *aDisplayLink = [[UIScreen mainScreen] displayLinkWithTarget:self selector:@selector(drawFrame)];
[aDisplayLink setFrameInterval:animationFrameInterval];
[aDisplayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
self.displayLink = aDisplayLink;
fpsの問題の原因と解決方法を教えてください。
または、レンダリングとゲームのロジックループを分離するための他のソリューションをお勧めしますか?