Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   removeChild спрайта из массива (http://www.flasher.ru/forum/showthread.php?t=160413)

lolsuicide 12.07.2011 16:53

removeChild спрайта из массива
 
Не знаю как еще назвать тему, суть в следующем:
у меня есть два массива со спрайтами arr_aaa (в нем хранятся спрайты) и arr_bbb (для отображения)
из массива arr_aaa в массив arr_bbb добавляется часть элементов (случайные), мне нужно периодически заменять спрайты в arr_bbb на новые из arr_aaa. Использую такой извратский способ, проверяю каждый элемент (добавлен ли он), удаляю, затем добавляю новые. Уверен есть что-то попроще, без такого объема "лишних" действий.
Код AS3:

...
for (var i=0; i < arr_aaa.length; i++)
        for (var j=0; j < arr_bbb.length; j++)
                if (arr_bbb[j].contains(arr_aaa[i]))
                        arr_bbb[j].removeChild(arr_aaa[i]);
...

еще пробовал (см ниже), но естественно т.к. элемент не клип, а спрайт, он выдает ошибку "firstChild в flash.display.Sprite; отсутствует значение по умолчанию.". Есть ли что-нибудь похожее для спрайта?
Код AS1/AS2:

...
for (var i=0; i < arr_bbb.length; i++)
        if(arr_bbb[i].firstChild != null)
                arr_bbb[i].removeChild(arr_bbb[i].firstChild);               
...


goodguy 12.07.2011 17:09

Так нельзя проверить содержит ли массив объект и уж тем более удалить его из массива. Для этого есть undexOf() и splice()
Собственно, массив и не содержит самих объектов в качестве детей. Он содержит ссылки на объекты.
Так что, чтобы проверить есть ли ссылка на объект в массиве, и если есть удалить ее, делаем так:
Код AS3:

for (var i:String in arr_aaa) {
      if (arr_bbb.indexOf(arr_aaa[i]) > -1) {
            arr_bbb.splice(arr_bbb.indexOf(arr_aaa[i]), 1)
      }
}


lolsuicide 12.07.2011 17:28

все же сделал:
Код AS3:

for (var j=0; j < arr_bbb.length; j++)
        if (arr_bbb[j].numChildren > 0)
                arr_bbb[j].removeChildAt(0);



Часовой пояс GMT +4, время: 10:04.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.