1

2つのシーンがあり、両方のシーンが同じ背景画像を共有しているため、両方のシーンのinitメソッドに以下のコードがあり、追加されています。すべてが完璧に機能します。私の質問は、同じ画像ファイルが2回読み取られ、メモリが割り当てられ、割り当てが解除されたため、シングルトンパターンを使用して1つの共通の場所(spriteManager)に保存し、そのインスタンスを再利用できないのはなぜですか?このようにすると、シーン1がシーン2に置き換えられたときに、メモリが解放されます。

これが私の頭に浮かぶのは保持ですが、この保持をどこでどのように処理するかはわかりません。一般的な再利用可能なスプライトを処理するための私のアプローチが間違っている場合は、同じことを行う適切な方法を提案してください。私はこのcocos2dを初めて使用するので、スプライトシートの概念を読んだことがありません。今のところ、すべてをシンプルに保ちたいと思います。

CCSprite *bg = [CCSprite spriteWithFile:@"bg.png"];

2番目の質問、2つの重いシーンを置き換えているときに読んだのですが、最初のシーンのメモリを解放して次のシーンのメモリを割り当てる際にオーバーラップするため、メモリリークが発生する可能性があります。したがって、これを回避するために、軽量シーンのロード(ロードシーン)を数秒間一時停止する必要があることを読みました。それは良い解決策であるか、シーンを置き換えること自体は問題を引き起こしません。

この投稿タイトル(スプライトの再利用とシーンの置き換え)に関する良い記事があれば素晴らしいと思います。。

4

1 に答える 1

3

最初の質問に答えるには、copriteManagerは必要ありません。cocos2Dにはすでにデフォルトのテクスチャキャッシュメカニズム(ccTextureCacheクラスを参照)があり、次回spriteWithFileを呼び出すと、テクスチャキャッシュからテクスチャが読み込まれるだけです。注:メモリ警告がある場合、ccTextureCacheは通常そのテクスチャをクリアします。

次に、オブジェクトの割り当てを適切に解除した場合、シーンを置き換えるときにメモリリークが発生することはありません。これについて読んだ場所へのリンクを提供できますか?

于 2012-09-14T17:34:22.193 に答える