4

AngryBirdsやCuttheRopeの場合、最初に画面全体のフレーム全体(ビュー全体)を描画してから、フレーム全体を画面にペイントして、アニメーションをスムーズにするのは本当ですか?

これは、サイズが20 x 20ピクセルの金属製のボールをアニメートし、最初にボールを消去してから新しい場所にボールを描画すると、非常に微妙ですが目立つちらつきが発生する可能性があるためです。

によってアニメーション化された場合も同じでdrawRect、画面全体が消去されてから、すべてが新しい場所に描画されます。これにより、上記よりもさらにちらつきが発生する可能性があります。

フレーム全体の描画方法に戻ります。ボールが座標(100,100)にあり、スクリーンショット全体(新しい背景が露出している)の上に座標(103、100)でボールがペイントされている場合、次のようになります。変更については非常に目立たない。(消えてから再び現れることはまったくありません)。

AngryBirdsやCuttheRopeゲームのようなスムーズなアニメーションを実現するにはどうすればよいですか?

4

3 に答える 3

4

OpenGLを使用します。これは、レンダリングにCPUの代わりにGPUを使用するため、Quartzメソッド(つまり、drawRect)のいずれよりもはるかに高速です。Quartzの使用は、正確に何をしているかに応じて、数百倍または数千倍遅くなる可能性があります。

OpenGLに頼りたくない場合。オブジェクトをUIView内に配置してから、アニメーション化できます。ビューのコンテンツが静的である限り、これはほとんどのアプリケーションにとって十分に高速です。たとえば、背景をビューにし、金属製のボールをビューにすることで、そのビューを移動して、問題なく非常にスムーズなアニメーションを実現できます。

于 2012-04-21T15:09:35.433 に答える
1

アプリがOpenGLを使用している場合、答えは「はい」です。フレームバッファーが画面に表示される前にレンダリングを実行します。画面に描画する他の方法は、完成した画像を画面に転送する前に、画面外のバッファに描画するのと同じ手法を使用すると思いますが、それについてはよくわかりません。

于 2012-04-22T01:17:36.147 に答える
1

CALayersを使用します。ビューよりも軽量です。

于 2012-04-21T17:18:17.133 に答える