2012-05-04 4 views
0

Таким образом, им с помощью этого кода, чтобы удалить несколько видеофрагментов из моей стадии:Проблемы получать объекты в стадии

for (var i:uint = 0; i < this.numChildren; i++) 
{ 
    if (this.getChildAt(i) is MovieClip 
     && pecasInGame.indexOf(this.getChildAt(i)) >= 0) 
    { 
     removeChild(this.getChildAt(i)); 
    } 
} 

Но его не очень хорошо работает ... У меня есть 5 клипов, чтобы удалить, и они все добавляются динамически, когда эти мувиклипы добавляются, я вставляю их в этот массив «pecasInGame», а когда есть пять, я пытаюсь удалить с помощью вышеупомянутого цикла.

Проблема в том, что она удаляет только 3 объекта 0, 2 и 4. 1 и 3 arent даже перечислены в цикле. Любая идея, почему это произойдет?

ответ

2

Вы удаление экранных объектов, поэтому индексы меняются ПОКА ваш цикл продолжается. Измените его таким образом:

for (var i:uint = this.numChildren-1; i >= 0 ; i--) 
{ 
    if (this.getChildAt(i) is MovieClip && pecasInGame.indexOf(this.getChildAt(i)) >= 0) 
    { 
     removeChild(this.getChildAt(i)); 
    } 
} 

Другой вариант: использовать массив, чтобы удалить объекты, как этот

for (var i:int=0; i<pecasInGames.length; i++) { 
    removeChild (pecasInGames[i]); 
} 
+0

Я тебя люблю человека! Большое спасибо! Это было настолько очевидно, что мне действительно стыдно прямо сейчас lol –

1

Проблема в том, что вы повторяете детей и удаляете одновременно, поэтому показатели детей меняются, что вызывает проблему.

Если вы хотите, чтобы удалить все видеоролики из списка отображения, сделать что-то вроде этого:

for each(var mc:MovieClip in pecasInGame) 
{ 
    if(getChildIndex(mc) != -1) 
     removeChild(mc); 
} 
Смежные вопросы