有这样一段代码
1 2 3 4 5 6 7 8 9 10 11 12 13 | var a1:Sprite=new Sprite(); var a2:Sprite=new Sprite(); var a3:Sprite=new Sprite(); var a4:Sprite=new Sprite(); var a5:Sprite=new Sprite(); var a6:Sprite=new Sprite(); var a:Sprite=new Sprite(); a.addChild(a1); a.addChild(a2); a.addChild(a3); a.addChild(a4); a.addChild(a5); a.addChild(a6); |
a里面含有6个Sprite;
当使用for循环函数进行如下循环后
for(var i:uint=0;i<a.numChildren;i++){
a.removeChildAt(i);
}
原本以为这样就可以把a里的对象都删除,其实不是这样的,发现a.numChildren在每次执行完a.removeChildAt(i);后发生了变化,每次都减去了一,因为a里面的对象被删除了一个,所以a.numChildren会比原来少1。这样执行了3次循环后a.numChildren变成3,i也变成3,3<3不成立退出循环。
由于as3的深度管理机制,那么不管怎么删除,深度为0位置的始终有对象存在(当删除1上的对象时,原来在2上的对象就下到1)
解决方法:
1 2 3 4 5 | var num=a.numChildren; for(var i:uint=0;i<num;i++){ a.removeChildAt(0); } trace(a.numChildren); |
就可以了,可以发现trace的结果是0,说明a里面的子对象全部被删除了。注意:千万不要把for(var i:uint=0;i<num;i++)换成for(var i:uint=0;i<a.numChildren;i++),(原理跟上面的一样)
最新评论