有这样一段代码

?View Code ACTIONSCRIPT
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)

解决方法:

?View Code ACTIONSCRIPT
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++),(原理跟上面的一样)