Loader() クラスを介して swf をロードします。swf がロードされると、root のすべての子をループし、removeChild() で TextField を削除します。これは最初は機能します - TextField は削除されます。しかし、ロードされた swf のトゥイーンが終了してループすると、削除された TextField がどういうわけか再表示されます。TextField は動的テキストです。一部の StaticText を削除すると、これは削除されたままになります。ここで何が起こっているのですか?
loopChildren(root);
function loopChildren(dispObj:*):void {
for (var i:int = 0; i< dispObj.numChildren; i++) {
var obj:DisplayObject = dispObj.getChildAt(i);
if (obj is DisplayObjectContainer) {
loopChildren(obj);
}
else {
if (obj is TextField) {
obj.parent.removeChild(obj);
i--;
}
}
}
}
すべての子に対してタイマー (5 秒間隔) と trace(obj.name) を指定して loopChildren を呼び出すと、obj.name が変更されることがわかります。TextField は、instance11、instance32、instance54 などと呼ばれます。新しいインスタンスが作成され、継続的に追加されているようですか?
編集: コードを swf に直接転送し、ラッパーを使用せずに実行すると、期待どおりに動作します。別の映画から読み込まれたときに何かが欠けているに違いありませんか?
EDIT2: 削除しようとしている TextField は、トゥイーンと同じタイム ライン上の別のレイヤーにあると言わざるを得ません。トゥイーンを独自のタイムラインに配置すると、期待どおりに動作するようです。しかし、動的テキストとトゥイーンは共存できないのでしょうか?