Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   getChild from loaded SWF (http://www.flasher.ru/forum/showthread.php?t=170340)

zelibiba84 22.10.2011 20:09

getChild from loaded SWF
 
Вложений: 1
подгружаю свф-ку
Код AS3:

loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete);
                        loader.load(new URLRequest('../lib/testSWF.swf'));
 
                }

далее вытаскиваю детей

Код AS3:

private function onLoadComplete(e:Event):void
                {
                        trace(loader.contentLoaderInfo.content);
 
                        var sss:MovieClip = loader.content as MovieClip;
 
                        // проверяем кол-во детей
                        trace(sss.numChildren);
 
                        // вытаскиваем детей
                        for (var i:int = 0; i <= sss.numChildren-1 ; i++)
                        {
                                var aaa:DisplayObject = sss.getChildAt(i);
 
                                trace(aaa  + aaa.name);
 
                                addChild(aaa)
                        }
 
 
 
                }

всё бы ничего, но один ребенок не обнаруживается,
причем если убрать строчку
Код AS3:

addChild(aaa)

,
то результат предыдущей строки
Код AS3:

trace(aaa  + aaa.name);

выводит правильное кол-во детей их их имена соответственно.

+ещё вопрос: Когда во FlashIDE в свойствах клипа ставлю галочку "экспорт в 1й кадр" он не обнаруживается вышепрведенным кодом. т.е. получается надо все клипы из library кидать в монтажный кадр?

smithy 22.10.2011 20:39

Цитата:

Сообщение от zelibiba84 (Сообщение 1041148)
всё бы ничего, но один ребенок не обнаруживается,
причем если убрать строчку
Код AS3:

addChild(aaa)

,
то результат предыдущей строки
Код AS3:

trace(aaa  + aaa.name);

выводит правильное кол-во детей их их имена соответственно.

Когда вы делаете addChild, объект сначала удаляется из контейнера, в котором находился (в данном случае это монтажный кадр загружаемой swf). Поэтому вполне логично что ребенок теряется. Кстати, у вас там наверно всего 2 или 3 ребенка, иначе потерялось бы больше, да? :)


Цитата:

Сообщение от zelibiba84 (Сообщение 1041148)
+ещё вопрос: Когда во FlashIDE в свойствах клипа ставлю галочку "экспорт в 1й кадр" он не обнаруживается вышепрведенным кодом. т.е. получается надо все клипы из library кидать в монтажный кадр?

Галочка "экспорт в 1й кадр" используется при создании swc, а не swf.

zelibiba84 22.10.2011 21:05

как же тогда этого избежать? детей то терять нельзя!:)

spooner 22.10.2011 21:11

Код AS3:

var aaa:DisplayObject = sss.getChildAt(0);

наверное

zelibiba84 22.10.2011 21:14

сделал массив childList
изменил вот так и... заработало)))

Код AS3:

 
                        // вытаскиваем детей
                        for (var i:int = 0; i <= sss.numChildren-1 ; i++)
                        {
                                var child:DisplayObject = sss.getChildAt(i) ;
 
                                childList.push(child);
 
                                trace(child + child.name);
 
                        }
 
                        for each( var child:DisplayObject in childList)
                        {
                                addChild(child);
                        }

хотя всё-таки странно чё эт они пропадают в 1м случае.. как-то по-моему нелогично..

spooner 22.10.2011 21:45

Все логично, вам же написали уже. Когда объект куда то добавляется он автоматом удаляется из старого места, так что добавив себе sss.getChildAt(0) тот что был с идексом 1 переезжает на 0, а вы в след. итерации берете объект с индексом 1 и получаете тот что в начале самом был с индексом 2 и т.д.

Добавлено через 4 минуты
Так что берите все время нулевой индекс:
Код AS3:

                        while (sss.numChildren) {
                                addChild(sss.getChildAt(0));
                        }



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

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