Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   выдернуть всех чилдов из эмбед мувиклипа (http://www.flasher.ru/forum/showthread.php?t=126265)

ALiEN_ 15.06.2009 17:35

выдернуть всех чилдов из эмбед мувиклипа
 
Дано:
Мувик который цепляем в проект как [ Embed ( .... Создаем и кладем на сцену.

Задача:
В цикле выдернуть все вложенные в него мувики, из всех кадров. Именно в цикле и именно из всех кадров, но за одно вхождение в кадр.

Примерное решение:
от iNils:
1. раздебажить флешку внутри себя выдернуть необходимые данные. (это долго, но можно как вариант)
2. раздебажить все swf еще на этапе сборки проекта и необходимые данные засунуть в флешку (это не оптимально)

Я пока думаю сделать просто предзагрузку, в которой пройтись по всем таким мувикам и надергать необходимую информацию (но это отнимет время)

Кто подскажет еще варианты?

silin 15.06.2009 18:50

такое подозрение, что за одно вхождение в кадр никак не узнать, что лежит в других кадрах, только если 'проехаться' по линейке в реальном времени:
Код AS3:

private function enterFrameHandler(evnt:Event):void 
{
        trace( "_testMC.currentFrame : " + _testMC.currentFrame );
        for (var i:int = 0; i < _testMC.numChildren; i++)
        {
                var child:DisplayObject = _testMC.getChildAt(i);
                trace( "child : " + child );
        }
        if (_testMC.currentFrame == _testMC.totalFrames)
        {
                _testMC.removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        _testMC.nextFrame();
}


ALiEN_ 15.06.2009 21:09

Да, как вариант, я и имел ввиду этот способ под предзагрузкой.
Только что с Нилсом обнаружили, за одно вхождение в кадр можно спокойно узнать, если компилировать в windows, если под маком получается глюк. Собственно я бился головой об стену под маком:
Делаем переходы gotoAndStop в цикле на все кадры основного ролика. В нем в определенные моменты появляются чилды numChildren = 2 или 3 (все как положено), но getChildAt (2) например возвращает пустую ссылку. Видимо баг плеера под макинтошем и надо искать пути обхода.

silin 15.06.2009 21:23

сомнительно, что маковский плеер так сильно отличается
к слову, у меня и в винде getChildAt дает null , при том что numChildren показывает верно
(Win XP SP3, плеер 10,0,22,87, flex_sdk_3.4)

ALiEN_ 15.06.2009 21:48

хм ... странно как, вот ссылка на готовый проект.

Соберем статистику, у меня mac os, версия плеера 10.0.22.87, FDT сборка под Flex SDK 3.2. numChildren показывает верно, getChildAt возвращает null или undefined, иногда Object, но не DisplayObject и не MovieClip.

UPD:
Очень забавно, если в конструкторе цикл убрать и заменить на вызов этой функции, все встает на свои места (только время надо подобрать) У меня с единицей, все мувики кроме одного находятся, если поставить 10, то вообще все назодятся. Такое впечатление, что мувики тупо не успевают инициализироваться, где то телега вперед лошади бежит )))
Код AS3:

private function step ():void
{
 
        goto ++ ;
 
        if ( goto < 30 )
        {
 
                setTimeout ( step, 1);
 
        }
 
        _massAddArrayStop (_slideB, goto);
 
        _allGotoAndStop (goto);
 
}


wvxvw 15.06.2009 22:07

А что будете делать с клипами, которые создаются динамически? :/

ALiEN_ 15.06.2009 22:14

А что с ними? С ними вроде вообще проблем нет. Или в чем конкретно вопрос?

silin 15.06.2009 22:32

имо, сомнительный выход с таймаутовым шаганием по фреймам, не дешевле/надежнее по enterFrame пустить? к слову, его ведь и задрать повыше наверное можно на это время

wvxvw 15.06.2009 22:48

Цитата:

Сообщение от ALiEN_ (Сообщение 828231)
А что с ними? С ними вроде вообще проблем нет. Или в чем конкретно вопрос?

код в кадре:
Код AS3:

if (Math.random() > .5) addChild(new Sprite());


ALiEN_ 16.06.2009 17:29

Сегодня всю ночь просидел с этим багом. Вобщем пока не удалось найти нормального решения ...
Определил, что если повесить слушателя ADDED на мувик, то в момент события, на таймлайне мувика ЕСТЬ ВСЕ вложенные мувики и они не null, далее пробегаясь по ним, вешал слушателей ADDED уже на них, но здесь ситуация получалась немного хуже. Ситуация примерно такая, как если бы мы сначала сделали addChild ( movie ), а потом на movie повесили слушателя ADDED (в итоге он все равно срабатывает, но в target лежит какая то ерунда, вроде Shape)
Очевидно это бага плеера, надо поискать репорты или зарепортить с примером...


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

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