2013-04-25 75 views
0

我试图删除MovieClip,但它说参数子项必须为非null。FLASH/AS3:删除孩子时出错。参数子项必须为非零

这我的脚本:

,使其在舞台上,我使用:

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

我跟踪我的阵列,它不为空。

有人可以帮我吗?谢谢:)

回答

1

你不应该根据这个数组的长度来修改一个循环中的数组,这种行为将是不可预知的。

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

它说提供的DisplayObject必须是调用者的孩子。 – user2319113 2013-04-25 12:32:00

+0

也许你不在舞台上,使用stage.removeChild – Kodiak 2013-04-25 12:47:49

+0

哇!有用!非常感谢你!我花了1周的时间! – user2319113 2013-04-25 14:34:51

0

试试这个

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

       } 
+0

错误已更改为DisplayObject必须是子项如果调用者 – user2319113 2013-04-25 12:36:07

+0

在删除arnam [i]之前,您可以尝试跟踪arnam [i] .parent以查看它已添加的位置(或如果):trace(“arnam [”) + i +“]。parent =”+ arnam [i] .parent); – moosefetcher 2013-04-25 14:24:45

2

我喜欢做这个零出数组和操纵成员我这样做:

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

现在,我会用的Vector影片剪辑,以强类型,而不是数组。并且还使用contains()来检查MovieClip在尝试删除它之前是否还处于舞台上:)

+0

这是一样的。它表示提供的DisplayObject必须是调用者 – user2319113 2013-04-25 12:34:39

+0

的孩子,那么您需要获取MovieClip的父级并调用remove()。任何DisplayObject都有一个.parent属性:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#parent – 2013-05-19 03:38:39

相关问题