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

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

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

Регистрация: Oct 2012
Сообщений: 7
По умолчанию Странное поведение removeChild

Друзья, можете подсказать.Нужно удалить все объекты в контейнере.
Раньше сделал так и все работало: брал текущую сцену и удалял все потомков в цикле
Код AS3:
removeChild(getChildAt(i));
Сейчас пришлось переделать и все объекты для удаления находятся в глобальном MovieClip.

Код AS3:
private var contPole:MovieClip = new MovieClip;
Функция
Код AS3:
var container:MovieClip = new MovieClip;
container.addChild(item); //Добавляем лоадер внутрь контейнера(картинку)	
contPole.addChild(container); // contPole уже добавлен на сцену
Функция
Код AS3:
trace(contPole.numChildren);// Правильно выводит количество потомком, т.е. они в нем есть
removeChild(contPole.getChildAt(0)); // Для примера удаляю первый. Он там есть проверял
Выкидывает вот такую ошибку.
Код:
ArgumentError: Error #2025: Предоставленный DisplayObject должен быть дочерним элементом вызывающего объекта.
	at flash.display::DisplayObjectContainer/removeChild()
	at Main/onClick()
Подскажите почему он не может удалить. Ведь в contPole есть этот контейнер.
Буду очень, очень благодарен за помощь


Последний раз редактировалось dimarik; 25.10.2012 в 22:02. Причина: теги, пожалуйста, не забывайте
Старый 25.10.2012, 17:00
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
А вы ради интереса поставьте contPole, container и item разные свойства name.

И сделайте потом

Код AS3:
trace((contPole.getChildAt(0) as MovieClip).name);
что-то мне подсказывает что нечисто тут с добавлениями
__________________
adobe AS3 manual

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
код оформите соответствующими тегами,

Код AS3:
contPole.removeChild(contPole.getChildAt(0));
__________________
low +

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

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от Observer Посмотреть сообщение
private var contPole:MovieClip = new MovieClip;
а еще вы скобочки забыли, не думаю что в этом дело. Но мало ли.

Код AS3:
= new MovieClip();
__________________
adobe AS3 manual

Старый 25.10.2012, 17:15
Observer вне форума Посмотреть профиль Отправить личное сообщение для Observer Найти все сообщения от Observer
  № 5  
Ответить с цитированием
Observer

Регистрация: Oct 2012
Сообщений: 7
Jewelz,
Код AS3:
contPole.removeChild(contPole.getChildAt(0));
Все заработало!
Не знал, что removeChild надо привязывать к contPole.

strangedk, компилятор(или интерпритатор) работал и так = new MovieClip;
Сделал = new MovieClip(); - это хороший стиль написания кода, спасибо, что указали.

Спасибо, огромное за помощь!


Последний раз редактировалось dimarik; 25.10.2012 в 22:03. Причина: теги ставь, бро
Старый 25.10.2012, 17:21
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 6  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
вместо
Код AS1/AS2:
contPole.removeChild(contPole.getChildAt(0));
пишите
Код AS1/AS2:
contPole.removeChildAt(0)

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

Регистрация: Aug 2008
Адрес: Рязань
Сообщений: 723
Цитата:
Сообщение от Observer Посмотреть сообщение
Jewelz,
Не знал, что removeChild надо привязывать к contPole.
не "привязывать" и вызывать

вы же хотите удалить ребенка у конкретного контейнера, поэтому у этого контейнера и вызывайте метод
__________________
low +

Старый 26.10.2012, 15:12
Observer вне форума Посмотреть профиль Отправить личное сообщение для Observer Найти все сообщения от Observer
  № 8  
Ответить с цитированием
Observer

Регистрация: Oct 2012
Сообщений: 7
Jewelz, с спасибо, что разъяснил. Теперь будет правильное понимание.
AlexLucas
Код AS3:
contPole.removeChildAt(0)
не работает
Код AS3:
contPole.removeChild(getChildAt(i));
и так не работает
Работает только в одном случае
Код AS3:
contPole.removeChild(contPole.getChildAt(i));
i - потому что в цикле

Старый 26.10.2012, 16:40
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 9  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
ну так подставляйте
Код AS1/AS2:
contPole.removeChildAt(i)
Если в цикле.
А
Код AS3:
contPole.removeChild(getChildAt(i));
не работает потому что вы пытаетесь из contPole удалить child его (contpole) родителя.

Старый 29.10.2012, 23:35
wapmaster вне форума Посмотреть профиль Отправить личное сообщение для wapmaster Найти все сообщения от wapmaster
  № 10  
Ответить с цитированием
wapmaster

Регистрация: Oct 2011
Сообщений: 21
вы должны удалять чайлды у родителя. так как у вас родителем является contPole, то у удалять вы должны ЕГО чайлды из него же.

как вариант если нужно удалять все чайлды то можно сделать вот так:
Код AS3:
while (contPole.numChildren > 0)
	contPole.removeChildAt(0);
или же как вариант более универсальную и удобную систему:
Код AS3:
public function NewClass() 
{
	clearAll(contPole);
}
 
public function clearAll($parent:MovieClip):void
{
	while ($parent.numChildren > 0)
		$parent.removeChildAt(0);
}
В таком случае функцией clearAll можно будет очищать любой мувиклип от всех чайдов.

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

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

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


 


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


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