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

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

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

Регистрация: Sep 2008
Сообщений: 27
По умолчанию for не выполняет всех интераций!!! О_О

Имеется следующий кусок кода:
Код AS3:
//очистим карту
trace(map_layer.numChildren);
for(var i=0; i<map_layer.numChildren; i++){
    trace(i);
    //удалим
    map_layer.removeChildAt(i);
    //
}
//
вывод trace вот такой:
Код AS3:
7
0
1
2
3
т.е. детей он насчитал 7, а интераций выполнил 4. Как это возможно? Бред какойто!

Добавлено через 10 минут
Сделал вот так заработало, кто бы мог подумать, индексы в массиве детей изменяются динамически... хмм..
Код AS3:
//очистим карту
			trace(map_layer.numChildren);
			var child_count = map_layer.numChildren-1;
			for(var i=child_count; i>=0; i--){
trace(i);
				//удалим сам объект
				map_layer.removeChildAt(i);
				//
			}
			//

Старый 28.08.2011, 05:15
saikspaik вне форума Посмотреть профиль Отправить личное сообщение для saikspaik Найти все сообщения от saikspaik
  № 2  
Ответить с цитированием
saikspaik

Регистрация: Nov 2009
Сообщений: 300
Ну так ты с помощью removeChildAt(i), уменьшаешь количество детей, поэтому все выполняется как положено.
Запиши в переменную количество детей, а потом используй его в цикле.

Добавлено через 14 минут
Цитата:
кто бы мог подумать, индексы в массиве детей изменяются динамически... хмм..
Хм, как бы им еще изменяться?

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

Регистрация: Jul 2011
Сообщений: 67
Код AS3:
while (map_layer.numChildren > 0) {
			  map_layer.removeChildAt(0);
		  }

Старый 28.08.2011, 12:10
vorodis2 вне форума Посмотреть профиль Отправить личное сообщение для vorodis2 Найти все сообщения от vorodis2
  № 4  
Ответить с цитированием
vorodis2

Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
Если те всех нужно прибить я делаю
Код AS3:
for(i=0; i>2; i++){
   if(map_layer.numChildren > 0) {map_layer.removeChildAt(0); i=0; }
}

Старый 28.08.2011, 12:40
СлаваRa вне форума Посмотреть профиль Отправить личное сообщение для СлаваRa Найти все сообщения от СлаваRa
  № 5  
Ответить с цитированием
СлаваRa
 
Аватар для СлаваRa

блогер
Регистрация: Feb 2008
Адрес: http://playtika.com
Сообщений: 1,119
Записей в блоге: 5
Отправить сообщение для СлаваRa с помощью ICQ Отправить сообщение для СлаваRa с помощью Skype™
вот еще вариант

Код AS3:
while (контейнер.numChildren) 
    if (удаляемый_клип.parent)
        контейнер.removeChild(удаляемый_клип)
__________________
местонахождение


Последний раз редактировалось СлаваRa; 28.08.2011 в 12:43.
Старый 28.08.2011, 12:44
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 6  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
Цитата:
2ProxyGreen, если не проверять наличие родителя, могут возникать ошибки
В примере, который привел 2ProxyGreen, нет смысла проверять наличие parent.

Старый 28.08.2011, 12:52
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
Сообщение от vorodis2 Посмотреть сообщение
Если те всех нужно прибить я делаю
Код AS3:
for(i=0; i>2; i++){
   if(map_layer.numChildren > 0) {map_layer.removeChildAt(0); i=0; }
}
Тяжелое прошлое в кадрах?

Добавлено через 2 минуты
Можно еще так:
Код AS3:
var i:int = container.numChildren;
while (i--)
    container.removeChildAt(i);

Старый 28.08.2011, 13:05
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Самый быстрый, как ни странно, while (map_layer.numChildren) map_layer.removeChildAt(0);.

Старый 28.08.2011, 13:48
Aquahawk вне форума Посмотреть профиль Отправить личное сообщение для Aquahawk Посетить домашнюю страницу Aquahawk Найти все сообщения от Aquahawk
  № 9  
Ответить с цитированием
Aquahawk
 
Аватар для Aquahawk

Регистрация: Nov 2010
Адрес: Москва
Сообщений: 915
Записей в блоге: 4
Отправить сообщение для Aquahawk с помощью ICQ Отправить сообщение для Aquahawk с помощью Skype™
Цитата:
Сообщение от i.o. Посмотреть сообщение
Можно еще так:
Код AS3:
var i:int = container.numChildren;
while (i--)
    container.removeChildAt(i);
Нельзя так. Например может быть дисплейобджект, который на свой ремув утащит ещё что-нибудь с парента. У меня так текстфилды с кастомный бекграундом сделаны. Класс наследник текстфилда не может сделать addchild на себя. А нужен хитрый динамический фон. Для этого он на своём событии added на парента складывает бекграунд и свапается с ним, а на ремувед, удаляет свой бекграунд сам. Такми образом это внешне текстфилд и весь код который работает с текстфилдом, работает и с ним, а уже он сам за собой таскает свой фон.(естественно переопределены сеттеры размеров и координат). Так вот когда сремувится текстфилд, он ремувит фон, и приведённый код выпадет с ошибкой.
__________________
:)

Старый 28.08.2011, 13:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от Aquahawk Посмотреть сообщение
может быть дисплейобджект, который на свой ремув утащит ещё что-нибудь с парента.
Это называется плохо спроектированный код. В вашем случае конечно так нельзя. Но это только в вашем случае.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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