我通过 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 与补间位于同一时间线上的单独层中。如果我将补间放在自己的时间线上,它似乎可以按预期工作。但是动态文本和补间不能共存吗?