6

スプライト フレーム キャッシュを使用して、アニメーションに使用する plists とスプライト シートをアップロードしています。私には2つのアプローチがあり、そのうちの1つが間違っていると確信しています。

  1. 時間がかかるため、最初にキャッシュできるものをすべてロードする必要があるため、シーンの開始時に、近い将来に必要なものをすべてロードします.(しかし、キャッシュがいっぱいです!)

  2. キャッシュはできる限り空のままにしておく必要があるため、アニメーションを開始した瞬間にキャッシュにロードし(時間がかかりますよね?ゲームをフリックすると思います)、完了と同時に削除しますそれと 。(キャッシュはいっぱいではありませんが、何度もロード/リロードする必要があります。)

  3. 未使用のスプライトを毎回キャッシュから削除するように注意する必要がありますか?

キャッシュへのロードは次のとおりです。

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrameByName:@"stopAnim.plist"];

取り外し未使用とは:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

iPad で、システムが未使用のスプライトを削除しようとしていて、問題があることがわかります。正確に仕事をする方法は何ですか?

4

1 に答える 1

3

多くの調査の後、私はいくつかの結論に達しました:

まず、(アニメーションの開始中に) フレームを にリアルタイムでロードするのに時間がかかりますbatchNode。大きな画像 (iPad) の場合、シーンがフリーズすることがあります。

したがって、そのような場合には、それを回避するために init メソッドで画像をキャッシュにロードする必要があります。これは、他に方法がないためです。

[[CCTextureCache sharedTextureCache] addImage:@"the_heavy_image.png"];

このアニメーションが頻繁に発生する場合は、キャッシュからクリアしたくありません。

使用しない場合は、他のものをキャッシュからクリアする必要があります

[[CCTextureCache sharedTextureCache] removeUnusedTextures];

画面から既に削除されたスプライトのみをキャッシュからクリアします。

フレームをクリアするだけでは十分ではありません:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames];

スプライト シートの画像がそれほど大きくない他のシナリオではbatchNode、アニメーションの開始時にそれらをロードし、最後に削除することができます。

于 2013-08-15T09:39:30.747 に答える