私のゲームをiPhoneにきれいに移植するために、NSTimerを使用しないゲームループを作ろうとしています。NSTimerを使わずにiPhoneでゲームループを作る方法
私はNSTimerを使用している場合、あなたは
drawViewのようなものになりますself.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
ようなもので最初にそれを設定したい、いくつかのサンプルコードに気づい:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
このテクニックを使用してmFooModelはうまく描画されますが、NSTimerがdrawViewを1秒間に60回呼び出すのではなく、drawViewを呼び出す独自のゲームループを作りたいと思っています。
while(gGameState != kShutDown)
{
[self drawView]
}
残念なことに私がこれを行うと、黒い画面が表示されます。なぜこれが起こるのですか?とにかく私がここで説明していることを実装することができますか?
私がNSTimerを避けたい理由は、ゲームループでフィジックスとAIアップデートを行いたいからです。私はこれを正確に行うために、自分の時計/タイマーを使って経過時間を記録しています。レンダリングはできるだけ速く行われます。 this article
これは多少の疑問です(一日中コーディングした後で、つまって、答えが朝までにあることを願っています)
乾杯。
ありがとうございました。これは非常に便利なコードです。 – user156848
私は1/45thよりも多くの仕事があると警告していませんでした(またはそれ以上のラン・ループ・ストール)、あなたは吃音、遅れたタッチイベント、および他の奇妙な問題を抱えます。徹底的にテストしてください。それを考慮に入れるコードを更新することは可能ですが、アプリケーション固有です – rpetrich
実行ループ内のすべてのalloc/deallocがパフォーマンスに影響しませんか?それをループ外に移動する方法はありますか? – Andrew