2

60hz で動作する NSTimer があります。OpenGL シーンをロードしてレンダリングすると、私のゲームは 60 fps で、1 日中しっかりと動作します。その後、アプリを再コンパイルまたはリロードすると、40 fps になります。同じリソースが読み込まれました。私は何年もこの問題に直面してきましたが、その理由を知りたいだけです。ばかげています。この愚かなタイマーを放棄する必要があるかどうかを知りたいです。私の 3GS では、ロード間で条件に違いはありません。たまに40fps出ます。明らかに、ロード間でクロックレートに違いはないため、一定のシーンではパフォーマンスの数値は一定である必要があります。これが私のフレームレートのログです:

良い負荷: :-)

フレームレート: 61 フレームレート: 61 フレームレート: 61 フレームレート: 60 フレームレート: 60 フレームレート: 61 フレームレート: 60 フレームレート: 60 フレームレート: 61 フレームレート: 60 フレームレート: 61

さて、先に進み、何もせず、再コンパイルして実行します。

フレームレート: 43 フレームレート: 50 フレームレート: 45 フレームレート: 48 フレームレート: 40 フレームレート: 45 フレームレート: 42 フレームレート: 41 フレームレート: 42 フレームレート: 44 フレームレート: 41 フレームレート: 46

^- 視覚的に大きな違い。フライング一体がこれを引き起こす可能性は何ですか?

シーンの同じエリア、同じカメラ設定。変数に違いはありません。

[編集] ハードウェア デコーダーで実行されていない音楽が原因である可能性があり、セットアップしてもデコーダーが引き継がれない場合があると言う人もいます。ただし、音楽を無効にしても、これは発生すると言えます[/編集]

4

1 に答える 1

2

CADisplayLink代わりに使ってみましたか?ドキュメントから:

CADisplayLink オブジェクトは、アプリケーションが描画をディスプレイのリフレッシュ レートに同期できるようにするタイマー オブジェクトです。

...

表示リンクが実行ループに関連付けられると、画面のコンテンツを更新する必要があるときに、ターゲットのセレクターが呼び出されます。

個人的には使用していませんが、フレームレート自体が向上しない場合でも、フレームレートが低い場合に発生する問題を解決できるようです.

于 2010-04-28T01:35:22.473 に答える