FLASH / AS3:删除孩子时出错。参数child必须为非null

时间:2013-04-25 10:00:52

标签: actionscript-3 flash-cs5 flash-cs6

我正在尝试删除MovieClip,但它说参数child必须为非null。

这是我的剧本:

为了使它成为舞台,我使用:

function sayam (e:MouseEvent):void{
    nilai = 8;
    if(nilai == temp) {
    var ssAyam:ayam_mc = new ayam_mc
    stage.addChild(ssAyam);
    ssAyam.x = 350.0;
    ssAyam.y = 330.0;
    ssAyam.width = 170.0;
    ssAyam.height = 170.0;
    ssAyam.instanceName = "Ayam";
    arnam.push("Ayam");
    trace("arnam" +arnam);
    trace(ssAyam.instanceName);
    jual = jual + 4000;
    temp = val[len-(len-len2)]
    len2 = len2 + 1;
    } else {
            money = money - 4000;

        }

    }

因此,我制作了8个函数,使8个动画片段在舞台上显示并将它们推送到数组。 数组是“arnam”。

这是我的删除代码:

function deleteBurger() {
                for(var i:Number=arnam.length; i >= 0; i--){
                        removeChild(arnam[i]);
                        arnam.splice(i,1);
                }
            }

我已经跟踪了我的数组并且它不是空的。

任何人都可以帮助我吗?谢谢你:))

3 个答案:

答案 0 :(得分:2)

我喜欢这样做以将数组归零并操纵成员:

while( arnam.length )
{
    removeChild( arnam.pop() );
}

现在,我会使用Vector的MovieClip来强类型,而不是数组。并且在尝试删除之前使用contains()来检查MovieClip是否仍在舞台上:)

答案 1 :(得分:1)

您不应该根据此数组的长度修改循环中的数组,行为将是不可预测的。

for each(var child:Sprite in arnam){
    stage.removeChild(child);
}
arnam = [];

答案 2 :(得分:0)

试试这个

for(var i:int=arnam.length-1; i >= 0; i--){
                        removeChild(arnam[i]);
                        arnam.splice(i,1);

                }