1

私はいくつかの問題を抱えているので、GLKViewControllerの専門家がそこにいることを願っています:)

私のアプリの簡単な説明です。さまざまな画面をプッシュする UINavigationController があります。

ある時点で、UINavigationController のサブクラスであるゲーム画面に到達します。この画面では、viewDidLoad手動で EAGLContext、GLKView を作成し、新しい GLKViewController をインスタンス化します (update&draw 呼び出しを処理するため)。

私は 30 の優先 fps を設定しています。

問題は、最初の 3 ~ 4 回の更新呼び出しには正しい DT が付属していることですが、その後、フレーム間に 1 秒の間隔が 2 ~ 3 個あることです。を使用して DT を測定しcontroller.timeSinceLastUpdateます。だから私は次のようになります:

dt=0.33
dt=0.33
dt=0.33
dt=1.07
dt=1.05
dt=0.33
dt=0.33

この後、DT回だけ有効になります。これらのフレームにそのような遅延がある理由がわかりません。update & draw メソッドでの所要時間を測定したところ、1 秒近くありませんでした。

また、テクスチャをロードしたり、ジオメトリを作成したりしていません。かなり小さなゲームなので、ロード時にすべてが行われます。

また、ゲーム画面コントローラーをポップして、ゲーム画面の別のインスタンスをプッシュバックすると、この新しい GLKViewController は約 1 秒ごとに更新メソッドを呼び出すだけです。

GLKViewController を使用しているときにフレームレートに問題があった人はいますか?

ありがとう、

4

2 に答える 2

1

問題は、リフレッシュの間にデバイスが他に何をしているのかわからないことです:)

次のフレームでの作業に費やした時間はわずか0.1秒かもしれませんが、メモリ警告がある場合は、アプリの他のビットも処理に時間がかかります。glコントローラーは、優先フレームレートを維持するのが最善だと思いますが、バックグラウンドで多くのことが行われている場合は、それについてできることはあまりありません。

コードが可能な限り高速にレンダリングされ、フレームレートと同じようにスパイクされていないことを確認する限り、それはレンダリングパスではありません。あなたの質問から、あなたはすでにそれをテストしたように聞こえます。

他にやりたいことは、アプリに渡される可能性のある他の通知(つまり、メモリ警告)に注意することです。

最後に、遅いフレームにはパターンがありますか?それらは、ロードされている新しいイメージまたはファイルアクセスと一致しますか?事前にできる限りのことをしましたか?編集-あなたの質問を読み直すと、あなたはすでにこれを行っていると思います、ごめんなさい!

申し訳ありませんが、これ以上使用することはできません:(

于 2011-10-28T17:18:54.397 に答える
0

わかりました、それで私はついにそれを理解しました。GLKViewController とは関係がないことが判明しました (驚くべき驚きです!)。

次のように、ゲーム画面のビューコントローラーを表示する方法と関係がありました。

    GameAreaViewController* gameController = [[GameAreaViewController alloc] init];

    [UIView beginAnimations:@"animation" context:nil];
    [self.navigationController pushViewController: gameController animated:NO]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
    [UIView setAnimationDuration:0.7f];
    [UIView commitAnimations];        

    SAFE_DEL(gameController);

アニメーションの長さを 0.3f にすると、遅延は発生しません。0.5f では時々それが得られ、0.7 では常に得られていました。

于 2011-11-01T09:36:16.067 に答える