as3在循环中删除子项

时间:2012-07-01 22:23:31

标签: actionscript-3 flash air

我正在使用Adobe AIR 3.3在Flash CS6中工作,并且在将影片剪辑添加到舞台后无法删除影片剪辑。这是我的代码:

for(var i = 0; i<starCount; i++)
{
    star = new newStar();
    choiceBoard.addChild(star);
    star.x = 195;
    if(i>=1)
    {
        star.x = 195 + 90*i;
    }
    star.y = 597
}   

这是我创建的一个函数的一部分,它动态添加星形影片剪辑...它添加了一个影片剪辑,增加了空间,添加了下一个影片剪辑等。如何删除所有的星影片后他们被创造了?

我试过了:

for(var i = 0; i<starCount; i++)
{
    if(contains(star))
    {
        choiceBoard.removeChild(star);
        trace("removed star");
    }
}

但这只会删除一颗星,无论“starCount”设置为什么。提前谢谢。

3 个答案:

答案 0 :(得分:2)

private var stars:Array=[];
for(var i = 0; i<starCount; i++)
{
    star = new newStar();
    stars.push(star);
    choiceBoard.addChild(star);
    star.x = 195 + 90*i;
    star.y = 597
}   

然后尝试

for(var i = 0; i<stars.length; i++)
{
    choiceBoard.removeChild(stars[i]);
    trace("removed star");
}

答案 1 :(得分:0)

星星他们只是选择的孩子吗?如果是这样,你可以删除所有的孩子:

choiceBoard.removeChildren();

或者,您可以将所有星星添加到数组中,然后遍历数组以删除它们:

var starArray:Array = [];

//...

for(var i = 0; i<starCount; i++)
{
    star = new newStar();
    //put the star into the array
    starArray.push(star);
    choiceBoard.addChild(star);
    star.x = 195;
    if(i>=1)
    {
        star.x = 195 + 90*i;
    }
    star.y = 597
} 

然后删除:

for(var i = 0; i<starArray.length; i++)
{        
    //remove the star from the display
    choiceBoard.removeChild(starArray[i]);      
    trace("removed star");
}
//clear the array
starArray = [];

答案 2 :(得分:0)

如果您已将所有星星添加到一个容器中(看起来与choiceBoard一样),并且该容器中没有其他任何内容可以保留,那么您可以非常简单地删除它们(和通过这样做:

while(choiceBoard.numChildren)
{
    choiceBoard.removeChildAt(0);
}