Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Когда стоит использовать обращение getChildAt и getChildByName? (http://www.flasher.ru/forum/showthread.php?t=138683)

Universe 14.04.2010 03:58

Когда стоит использовать обращение getChildAt и getChildByName?
 
Привет! Возникла вполне банальная ситуация...есть 2 мувиклипа контейнера...в первом есть 20 объектов, которые генерятся в for'e из одного объекта в библиотеке. Во втором контейнере есть кнопка, которая удаляет эти объекты(в первом контейнере) по очереди, т.е. один за другим. Т.к. в данном случае при обращении к нужному объекту необходимо указывать на 2 уровня в глубину - не получается использовать метод getChildAt и getChildByName, т.е. строка типа parent.getChildAt(i).getChildByName("ball"+i) не прокатывает. Следовательно вопрос - обязательно ли в этом примере загонять все создаваемые объекты в массив, а потом уже обращаться к ним как к элементам массива, или всё таки можно как то использовать выше приведённые методы? И в каких случаях их вообще желательно/не желательно использовать.
И ещё один вопросик...используя метод removeChild для удаления объектов необходимо записывать - "путь к удал. объекту".removeChild("путь к удал. объекту" + имя самого объекта), или можно в скобках обойтись только именем смого удаляемого объекта?
Спасибо за помощь!:)

MrPoma 14.04.2010 04:39

Обращение к элементам массива быстрее, чем вызов методов getChildAt и getChildByName. Для 20 объектов, конечно, не критично.
removeChild получает ссылку на объект. Типо того, что возрващают getChildAt и getChildByName.

Gaen 14.04.2010 04:39

Первый вопрос непонятен, отвечу на второй. Методу removeChild не нужно передавать никаких путей и имен, все это осталось далеко в AS1. getChildByName("ball" + i) тоже оттуда, избавляйтесь от такого. Метод removeChild принимает ссылку на объект, которую можно получить при помощи тех же getChildByName() и getChildAt().

Если вам нужно удалить всех детей внутри какого-то контейнера, то самый простой и эффективный способ - сделать так:
Код AS3:

while(someContainer.numChildren)someContainer.removeChildAt(0);


Universe 14.04.2010 04:49

В том то и дело, что мне нужно удалять их не сразу а при последовательном нажатии на кнопку которая находится не в основной сцене, а в другом контейнере! И интересует способ с относительной адресацией! Т.е. как мне выйти из этого контейнера, обратится к первому контейнеру и удалить из него первого попавшегося ребёнка!

Gaen 14.04.2010 14:38

В контейнере, общем для кнопки и того контейнера, из которого вы хотите удалять детей, подписаться на MouseEvent.CLICK. Типа вышли. В обработчике события получить ссылку на нужный контейнер, который является дочерним, при помощи getChildAt/getChildByName. Типа вошли. Удалить первого попавшегося - почти так же:
Код AS3:

if(someContainer.numChildren)someContainer.removeChildAt(0);


Universe 18.04.2010 01:48

спасибо!:)


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

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