1

cocos2dを使ってiPhoneゲームを開発しています。

プレーヤーが動き回り、何かをしてポイントを獲得すると、小さな CCLabelBMFont インスタンスが表示され、フェードアウト (CCFadeOut) されます。これらの CCLabelBMFont インスタンスは、レイヤーに追加されるスプライトです。

CCFadeOut アクションを完了した後、フェードアウトしたスプライトをレイヤーから削除しないことで、メモリなどを「リーク」していますか、それとも消えてしまったのでしょうか、それとも「有効」と見なす必要はありませんか?

4

2 に答える 2

1

CCFadeOutが終了した後、レイヤーは透明になったラベルを保持します。後でフェードインする予定がない限り、後で手動でレイヤーから削除する必要があります。フェードインする場合は、そのままにしておくことができます。

これは非効率的なメモリ使用量であり、メモリリークではありません。

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

更新:フェードアウト後にラベルを削除する方法

CCFadeOutを次のようなCCSequenceに置き換えます。

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

次に、新しいハンドラーremoveLabel:を実装し、ラベルを削除します。引数としてラベルを取ります。

于 2012-04-22T13:46:22.843 に答える
0

CCFadeOutスプライトを削除したり解放したりすることはありません。目的が終わったら、スプライトを削除する必要があります。実際、他のオブジェクトを解放/削除するアクションはありません。彼らはそれらを操作しているだけです。

于 2012-04-21T18:12:06.720 に答える