2013-08-15 9 views
6

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

  1. シーンの開始時に私は近い将来に必要なすべてのものをロードするので、それは、時間がかかるので、私は。開始時にキャッシュするために私ができることはすべてをロードする必要があります(ただし、今の私のキャッシュがいっぱいです! )

  2. キャッシュは空にする必要がありますので、私はアニメーションを開始する瞬間にキャッシュにロードしています(時間がかかりますか?私のゲームを飛ばしてしまうと思います)。同じ瞬間に私はそれで終わった。 (現在キャッシュがいっぱいではありませんが、私は何度もリロード/ロードする必要があります。)

  3. 私はキャッシュから毎回、未使用のスプライトを削除するために世話をする必要がありを行いますか?キャッシュへ

負荷は次のとおりです。

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

未使用の削除は、次のとおりです。

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

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

答えて

3

が研究の多くの後、私はいくつかの結論に達した:

まず、それは(batchNodeに(アニメーションが開始されている間)リアルタイムでフレームをロードするために時間がかかり、大きな画像の例ではありませんiPad)時々凍ってしまいます。

ので、そのようないくつかのケースでは、あなたが他の方法を持っていないので、あなたが、それを避けるために、initメソッドでキャッシュするためにイメージをロードしなければならない、と私たちはとにかくキャッシュを持っている理由です:

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

このアニメーションが頻繁に発生する場合は、キャッシュからクリアする必要はありません。あなたがキャッシュからすでに画面から削除されただけのスプライトをクリアしますそれ

[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

を使用していけない場合

他のものはキャッシュからクリアしてください。

だけのフレームをクリアするのに十分ではない:スプライト・シートの画像がその大きなではない他のシナリオで

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 

、あなたはアニメーションが開始された瞬間にbatchNodeにそれらをロードし、削除することができます彼らは最後に。

関連する問題