13

ゲームでメソッドを使用してフレームを毎秒60回CADisplayLink描画するために使用しています。EAGLView

フレームレートを呼び出すとUIView animateWithDuration:、アニメーションの期間中、60 から 30 fps の正確に半分に低下します。アニメーションが終了すると、fps はすぐに 60 に戻ります。

NSTimer代わりにアニメーションメソッドを使用してみましたがCADisplayLink、それでも同じ結果が得られます。

スピーカーアイコンがフェードアウトしているときに音量ボタンを押すと同じ動作が発生するため、使用している可能性がありますanimateWithDuration。アプリでスピーカー アイコンをスムーズに処理できるようにしたいので、アニメーション コードを書き直して 以外の別の方法を使用することはできませんが、それでanimateWithDuration動作するソリューションを見つける必要があります。

シミュレーターでのデバッグ用にアニメーションを遅くするオプションがあることは認識していますが、デバイスでこれが発生しており、そのようなオプションが有効になっていません。animateWithDurationまた、リニアオプションやユーザーインタラクションなど、さまざまなオプションを使用してみましたが、どれも改善されませんでした.

また、さまざまなフレーム レートでも機能するエンジンを設計できることも認識しています。ただし、ゲームには高い fps が望ましいため、これはこの問題の理想的な解決策ではありません。

誰かがこの問題を見たことがありますか、または以前に解決しましたか?

4

3 に答える 3

1

これに対する解決策は、CADisplayLink コールバック中に独自のアニメーションとブリットを行うことです。

1) 音量の問題については、隅に小さな音量アイコンを配置するか、ユーザーが事前に定義されたタッチ操作を行った場合に表示し、タッチ コントロールを提供します。その入力を使用して、AVAudioPlayer を使用して音量を変更し、システム コントロールを完全に回避することができます。ユーザーが音量ボタンを押したことを確認し、自分のやり方でやってくださいというメモをポップすることさえできるかもしれません。これにより、システムによって発生するアニメーションから逃れることができます。

2) やりたいアニメーションがある場合は、コードで一連の画像を作成し (その時点で、または事前に)、displayLink 内の非常に多くのコールバックごとに、画像を画面にブリットします。

于 2012-08-08T17:59:38.900 に答える
0

これは、フレーム レートの同様の低下について説明している古いスレッドですanimateWithDurationその場合、問題の原因は 2 つ以上の半透明のスプライトを追加することでしたが、複数のレイヤーを一緒に合成しようとするときはいつでも、フレーム レートを下げるのに十分な作業を行っている可能性があり、実際にそうなっている可能性が非常に高いと思います。まさにそのようなこと。

于 2012-08-08T15:59:50.930 に答える
-1

OpenGL または CoreAnimation を使用します。互換性がありません。

これをテストするには、UIView アニメーションを削除します。フレーム レートは期待どおりになります。UIView アニメーションを追加すると、30fps に低下します。

あなたが言った:

UIView animateWithDuration: を呼び出すと、アニメーションの期間中、フレームレートが 60 から 30 fps の正確に半分に低下します。アニメーションが終了すると、fps はすぐに 60 に戻ります。

私の答えを受け入れない理由がわかりません。これは、UIView アニメーションと UIView を使用しない CA アニメーションを組み合わせたときに起こることとまったく同じです。

于 2012-08-09T03:49:55.123 に答える