首先,我将简要解释一下:
我有2个阵列,第一个Array:holder,第二个Array:Clips。 第一个数组是动态空框作为网格图案,通过循环将每个项目推入一个数组并添加到舞台//仅为位置x,y
第二个数组:剪辑是动态加载的SWF电影,10个在一起 这些加载的SWF剪辑是“addChild”到Holder数组中,因此这些剪辑将以网格模式并同时推入数组Clips,作为参考示例
Clips[1].x = 50 ; // this works fine
所以我知道我的剪辑在那里,正确引用。但是,似乎要做的就是从数组中删除所有内容:Clips
var len:int = Clips.length;
for( var i:int = 0; i < len; i++ ) {
this.removeChild( Clips[i] ) ;
}
我尝试过拼接以及相同的结果只是抛出错误或什么都不做,无论是我的项目都没有删除/删除上演。
简单的方法来解释我在一个数组中加载了15个项目,每次按下按钮我想要清除该数组并重新填充另外15个项目,这种情况每10秒发生一次...
我可以重新填充没有问题它会继续在旧内容上加载更多东西,但我希望清除旧内容
答案 0 :(得分:2)
为防止错误,请修改您的条件:
if(this.contains(Clips[i]){
this.removeChild(Clips[i]);
}
如果它仍然不起作用,你可能会从错误的剪辑中移除,即不是'this' - 试试这个:
if(Clips[i] != null && Clips[i].parent != null){
Clips[i].parent.removeChild(Clips[i]);
}
(Clips[i] != null
条件的一部分已添加,以检查下面评论中是否出现错误)
这会检查剪辑是否指定了父级(如果有的话,它位于另一个剪辑内)并将其从该剪辑中删除,而不仅仅是'this'。
..我还建议使用Vector而不是数组 - 你可以将任何类型的值放入数组中,所以如果你把非DisplayObject放在那里你会在尝试时遇到错误从舞台上移除:
var clips:Vector.<DisplayObject> = new Vector.<DisplayObject>();
而不是:
var clips:Array = [];
除了上面的庞大声明之外,这个函数在大多数方面都与数组完全相同(函数如push,splice,带有方括号表示法的引用元素,例如clips[0]
等),但只会让你放置某些类型其中的对象/变量 - 在本例中为DisplayObject。如果你试图把'int'放在那里,它就不会让你 - 它运行得更快!它们在任何情况下都值得使用,但是在这里它们可能会有所帮助,以防你在没有意识到的情况下将其他东西放入该阵列中(我已经做了很多次)。
希望这有帮助!
答案 1 :(得分:1)
试试这个。如果它工作,那么这意味着你试图从错误的父母中删除孩子。在这种情况下,您应该接收运行时错误。如果以下代码不会导致错误,但屏幕上仍有内容,那么您可以在某处复制内容。如果执行加载的代码被调用两次,就会发生这种情况。
var len:int = Clips.length;
for( var i:int = 0; i < len; i++ ) {
Clips[i].parent.removeChild(Clips[i]);
}