Actionscript删除显示对象

时间:2010-03-19 20:47:44

标签: actionscript-3

我不明白为什么我的显示对象都没有删除。当我按下按钮时,我期待跟踪并移除两个形状和按钮,但没有任何反应:

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);
        }
    }

我意识到有更好的方法来实现这一点,但我正在学习,因此只对上述代码不起作用的原因感兴趣。

3 个答案:

答案 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