2012-01-24 4 views
1

Cocos2Dについて質問があります。ゲームで2つのシーンがあり、どちらもシーンにスプライトがたくさんあります。 1つのシーンを置き換えて別のシーンをロードするとどうなりましたか?すべてのスプライトが自動的に削除されるのですか、それとも思い出がありますか?シーンのdeallocでリリースすると解放されますか?Cocos2Dシーンメモリ管理

この状態でメモリをどのように管理しているのか分かりませんので、何か説明してもらえますか?これはシーンにロードするときスプライトを保持させるために重要です。

答えて

0

新しいシーンがメモリに読み込まれた後、すべてのスプライトが解放されます。スプライトは保持していない限り、すべて解放されます。

+0

がtrueでない場合、最初の解答で説明したように、2つのシーンがメモリ上に存続する期間があります – xus

0

何をやっていることは何の保持や凝っ

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

しない場合、あなたは/遷移シーンを切り替えたときに、このシーンの全ての子供が(この例では、スプライトは、自動的に解除されます。あなたは、 。

オブジェクトの所有権を取ることはありません。しかし、あなたがオブジェクトの所有権を取る場合、たとえば、言わせている場合:

hero = [[CCSprite spriteWithFile:@"hero.png"] retain]; 
// or 
hero = [[CCSprite alloc] initWithFile:@"hero.png"]; 

あなたはYでそれを解放する必要があります私たちのdealloc

6

あなたがreplaceSceneを呼び出す瞬間、両方のシーンは短期間メモリに存在します! CCSceneTransitionを使用すると、トランジションの間、両方のシーンがメモリに保存されます。次のように

流れがある:

  • Aを割り当て解除し、メモリが解放されるシーンAが
  • シーンBが初期化さsceneBと
  • コールCCDirector replaceSceneを実行して、スプライトなど
  • をロードすることができるシーン

シーン内に-(void) cleanupメソッドを実装して、ほとんどのiを削除できます新しいコンテンツを-(void) onEnter { [super onEnter]; }メソッドに読み込むのを延期することができます。

個人的には、このシナリオでは、2つのシーンの間に入ってくるシーン(「数ミリ秒以上アクティブではないかもしれません)」という「ローディング」シーンというより良いアプローチがあります。これにより、次のシーンが初期化される前に最初のシーン時間が割り当て解除されます。

関連する問題