我不明白为什么我的显示对象都没有删除。当我按下按钮时,我期待跟踪并移除两个形状和按钮,但没有任何反应:
import fl.controls.Button;
var shape1:Shape = new Shape();
shape1.name = "Shape1";
shape1.graphics.lineStyle(4, 0x000000);
shape1.graphics.beginFill(0x000055, 0.5);
shape1.graphics.drawRoundRect(50, 50, 100, 75, 20, 30);
shape1.graphics.endFill();
addChild(shape1);
var shape2:Shape = new Shape();
shape2.name = "Shape2";
shape2.graphics.lineStyle(4, 0xFFFF99);
shape2.graphics.beginFill(0x550000, 0.5);
shape2.graphics.drawRoundRect(100, 75, 200, 175, 50, 10);
shape2.graphics.endFill();
addChild(shape2);
button1.addEventListener(MouseEvent.CLICK, pushButton);
function pushButton(evt:MouseEvent):void
{
for(var amount:int = numChildren; amount == 0; amount--)
{
trace(amount);
var disObj:DisplayObject = getChildAt(amount);
trace("Removing " + disObj.name);
removeChildAt(amount);
}
}
我意识到有更好的方法来实现这一点,但我正在学习,因此只对上述代码不起作用的原因感兴趣。
答案 0 :(得分:3)
将for循环更改为:for(var amount:int = numChildren - 1; amount >= 0; amount--)
答案 1 :(得分:2)
这不是一种从DisplayObject中删除子对象的非常可靠的方法,像这样的while循环会将其排序:
while (displayObject.numChildren > 0)
{
displayObject.removeChildAt(0);
}
使用for循环实现,您会发现某些对象将被删除,但它不会全部用完。 while循环将一直持续到没有任何东西为止。只需将'displayObject'替换为要从中删除内容的任何容器对象。
答案 2 :(得分:2)
看起来你的循环连续条件永远不会运行,因为你说当循环只会'继续'当孩子们== 0