Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.07.2011, 16:53
lolsuicide вне форума Посмотреть профиль Отправить личное сообщение для lolsuicide Найти все сообщения от lolsuicide
  № 1  
Ответить с цитированием
lolsuicide
 
Аватар для lolsuicide

Регистрация: Jul 2011
Адрес: где-то на планете земля
Сообщений: 23
Question 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);		
...

Старый 12.07.2011, 17:09
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Так нельзя проверить содержит ли массив объект и уж тем более удалить его из массива. Для этого есть 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)
       }
}

Старый 12.07.2011, 17:28
lolsuicide вне форума Посмотреть профиль Отправить личное сообщение для lolsuicide Найти все сообщения от lolsuicide
  № 3  
Ответить с цитированием
lolsuicide
 
Аватар для lolsuicide

Регистрация: Jul 2011
Адрес: где-то на планете земля
Сообщений: 23
все же сделал:
Код AS3:
for (var j=0; j < arr_bbb.length; j++)
	if (arr_bbb[j].numChildren > 0)
		arr_bbb[j].removeChildAt(0);


Последний раз редактировалось lolsuicide; 14.07.2011 в 13:18. Причина: показалось...
Создать новую тему Ответ Часовой пояс GMT +4, время: 03:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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