2013-04-25 2 views
0

Я пытаюсь удалить MovieClip, но он говорит, что дочерний элемент параметра должен быть не нулевым.FLASH/AS3: ошибка при удалении дочернего элемента. Параметр child должен быть не нулевым

это мой сценарий:

Чтобы сделать это в сцене, я использую:

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 MovieClips для отображения на сцену и подтолкнуть их к массиву. Массив «Арнам».

и это мой удалить код:

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

+0

может быть, вы не на сцене, используйте stage.removeChild – Kodiak

+0

ничего себе! оно работает! Большое спасибо! Я потратил 1 неделю на это! – user2319113

0

попробовать это

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

       } 
+0

ошибка изменилась на DisplayObject должна быть дочерней, если вызывающий абонент – user2319113

+0

Перед удалением arnam [i] вы можете попробовать отслеживать arnam [i] .parent, чтобы увидеть, где (или если) он был добавлен: trace ("arnam [" + i + "]. parent =" + arnam [i] .parent); – moosefetcher

2

Я хотел бы сделать это, чтобы обнулить массив и манипулировать членами, как я делаю так:

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

Теперь я хотел бы использовать Vector из MovieClips, чтобы строго напечатать, а не массив. А также используйте contains(), чтобы проверить, что MovieClip все еще находится на этапе, прежде чем пытаться удалить его.

+0

все одинаково. он говорит, что поставляемый DisplayObject должен быть дочерним элементом вызывающего абонента – user2319113

+0

, тогда вам нужно получить родителя MovieClip и вызвать remove() на нем. В любом DisplayObject есть свойство .parent: http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#parent –

Смежные вопросы