PDA

Просмотр полной версии : getChild from loaded SWF


zelibiba84
22.10.2011, 20:09
подгружаю свф-ку

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

}


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


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)
}



}


всё бы ничего, но один ребенок не обнаруживается,
причем если убрать строчку addChild(aaa),
то результат предыдущей строки trace(aaa + aaa.name); выводит правильное кол-во детей их их имена соответственно.

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

smithy
22.10.2011, 20:39
всё бы ничего, но один ребенок не обнаруживается,
причем если убрать строчку addChild(aaa),
то результат предыдущей строки trace(aaa + aaa.name); выводит правильное кол-во детей их их имена соответственно.

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



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

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

spooner
22.10.2011, 21:11
var aaa:DisplayObject = sss.getChildAt(0);
наверное

zelibiba84
22.10.2011, 21:14
сделал массив childList
изменил вот так и... заработало)))



// вытаскиваем детей
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 минуты
Так что берите все время нулевой индекс:

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