私はこの設定を持っています:cocos2dはスプライトをアクションで削除します
レイヤーにはスプライトがあります。スプライトは、そのinitメソッドでこのコードを持っています
id fadeOut = [CCFadeOut actionWithDuration:1.0f];
id death = [CCCallFunc actionWithTarget:self selector:@selector(die)];
self.deathAction = [CCSequence actions:fadeOut, death, nil];
[self runAction:deathAction_];
死のアクションは、そのステータスが「死んだ」に変更されたスプライトの「ダイ」メソッドを呼び出します。その更新方法で
層をチェックし、すべての子どもたちとのものがWICH削除するには、と「死んで」であり:
[self removeChild:child cleanup:YES];
問題は、子スプライトはまだこの行の後に2のretaincountを持っているということです。私はそれがCCCallFuncによって保持されていることを理解しています。このdeathActionを省略し、不透明度がゼロのスプライトを削除すると(コードが色あせている場合)、コードが動作しており、deallocメソッドが呼び出されます。
アクションを適切に使用してスプライトを削除するにはどうすればよいですか?
あなたは参考になりました。私はコードがスプライトによって内部的に処理されるようにコードを修正しました。私はアクションを通して死のメソッドを呼び出し、 '[self removeFromParentAndCleanup:YES];と呼びます。問題はこの呼び出しの前に' [deathAction_ release];を呼び出すことでした。どうして?私はスプライトのdeallocメソッドでリリースコールを持っていますか?何かアクション以外の方法でスプライトを削除したいのですが? – bolshas
バランスを保っているものを正確に知らなくてもオブジェクトを解放している場合は、症状を隠しただけで問題は解決しません。 – bbum