グローバルクリーンアップ機能を使用して、MovieClipまたはTextFieldを削除しようとしています。私はクリップを直接参照しないでクリップを削除したい。どんな助けでも大歓迎です。ここでガベージコレクションのクリーンアップ関数の作成に問題があります。[例の中の]
var clip:Sprite = new Sprite();
clip.graphics.beginFill(0x000000, 1)
clip.graphics.drawRect(0,0,100,100)
clip.graphics.endFill()
clip.name = "clip"
addChild(clip);
cleanup(clip)
function cleanup(mc):void {
removeChild(mc.parent.getChildByName(mc.name));
mc = null
// clip is removed and traces as [object Sprite]
trace(clip)
//
addChild(clip);
removeChild(clip)
clip = null
// clip is removed and traces as null.
trace(clip)
}
は、FLA(Flash CS4の)です:http://dl.dropbox.com/u/4725599/test-cs4.zip
これはすべて意味がありますが、機能を通してMovieClip/Spriteを渡そうとするとどうなりますか?私はクリップが渡されているかどうかを確認するためにコンディションの束を設定することができますね!= null。それを行うためのより良い方法があるはずですか? – Tom
私はいくつかの点で私の答えを更新しました。具体的には、エラーが発生するかどうかを確認します。たとえば、親があるかどうか最初にチェックすることなく、 'removeChild()'を呼び出すことはありません。 – divillysausages
'cleanup()'に渡されるものはすべてあなたのコードの構造に依存していることを確認してください。あなたがよく定義された状態(init、play、destroy)を持っているなら、あなたはこの問題を起こすべきではありません。同じオブジェクトを2回クリーンアップしようとすると、構造に問題があります。それは、チェックを追加することは決して傷つけることはありません;)それは、メインブラウザでデバッグプレーヤーを実行する私たち全員のために役立ちます – divillysausages