2

この質問にはたくさんの答えがあります。しかし、それらはすべて正しくありません。

たとえば、1 つの CCSprite オブジェクトで CCLayer オブジェクトを作成したとします。3 つのテクスチャがあり、タッチするたびにそれらを切り替えたいと考えています。

たとえば、次のようなものを使用します。

リンク

このアプリケーションを Simulator で実行します。次に、メモリ警告を呼び出します。次に、画像 (テクスチャ) を切り替えてみます。そして、3枚のうち2枚の画像が削除されていることがわかります(メモリ警告が表示されたときに画像が表示された場合を除く)。

CCSprite と ССTexture2D の保持/解放コマンドを使用しようとしましたが、解放されたオブジェクトの dealloc メソッドが呼び出されない状況が発生します。

では、それらを正しく保管するにはどうすればよいでしょうか。それらをメモリ警告で保存し、現在のレイヤーが破棄されたときにそれらを解放/削除したい。

4

3 に答える 3

3

Texture Packer で作成された 1 つのテクスチャ アトラスにそれらを保存します。あとは [Sprite setDisplayFrame:frameName] を呼び出すだけで、表示されるテクスチャを切り替えることができます。

于 2012-12-22T10:20:31.760 に答える
2

テクスチャをプリロードするときにメモリの警告が表示された場合、使用されていないテクスチャを削除する cocos2d のデフォルトの動作は、あなたを悩ませます。この問題の詳細については、こちらをご覧ください。

私のアドバイス: AppDelegate のメモリ警告メソッドで cocos2d のキャッシュをパージする呼び出しを削除してください。もちろん、メモリの使用には細心の注意を払う必要があります。別の方法として、画像をプリロードしている間は単純にこの動作を無効にすることもできますが、これにより問題が後回しになる可能性があります。

于 2012-12-19T23:13:38.210 に答える
2

デフォルトでは、メモリ警告で cocos2d は未使用のテクスチャを削除します。メモリ警告の全体的なポイントは、OS がアプリに「ちょっと、それは問題です。メモリの消費量を減らすか、シャットダウンします」と伝え、アプリは「おっと、申し訳ありませんが、今すぐメモリを解放します」のようにする必要があります。

于 2012-12-19T23:10:01.340 に答える