2012-04-21 1 views
1

私はcocos2dを使ってiPhoneゲームを開発しています。cocos2d-iphoneフェードアウトスプライトにクリーンアップが必要ですか?

プレイヤーが何かを実行してポイントを移動したりポイントを付けると、CCLabelBMFontインスタンスが表示されずにフェードアウト(CCFadeOut)されます。これらのCCLabelBMFontインスタンスは、レイヤーに追加されるスプライトです。

フェードアウトされたスプライトをCCFadeOutアクションを完了した後に削除しないでメモリやその他のものを「漏洩している」、またはそれらがなくなった、または「有効」とみなす必要はありませんか?

答えて

1

CCFadeOutが終了すると、レイヤーは現在透明なラベルを保持し続けます。後でフェードインする場合を除き、手動でレイヤーからレイヤーを削除する必要があります。

メモリリークではなく、非効率的なメモリ使用です。

レイヤが割り当て解除されると、保持をトリガしない方法でラベルをインスタンス化していないと仮定して、ラベルを含む子ノードの割り当てを解除するため、メモリリークは発生しません。

更新:彼らは

をフェードアウトした後、このようになりますCCSequenceであなたのCCFadeOutを交換したラベルを削除する方法:

[yourLabel runAction:[CCSequence actions:[CCFadeOut actionWithDuration:DURATION], [CCCallFuncN actionWithTarget:self selector:@selector(removeLabel:)], nil]]; 

今、あなたの新しいハンドラremoveLabelを実装していますし、それを削除しますラベル。それはその引数としてラベルを取ります。

+0

それはもちろん理にかなっていて、私はそれほど期待していませんでした。私は[レイヤーremoveAllInvisibleChildren]のようなものを言うことができる方法はありますか?そうでなければ、「非効率的なメモリ使用」問題に対処するために十分に頻繁に自分のレイヤーを「リサイクル」していない限り、これらのものの在庫を保持する方法が必要だと思います。 – robbpriestley

+0

CCFadeOutをCCSequenceに置き換えることができます。私は私の答えを更新しました。 –

+0

ああ、それは完璧な意味があります。ありがとうございました。 – robbpriestley

0

CCFadeOutあなたのスプライトを削除したり解放したりすることはありません。あなたのスプライトは目的が終わったらやるべきです。 Infactは、他のオブジェクトをリリース/削除しません。彼らはそれらを操作するだけです。

関連する問題