Как управлять динамически загруженным SWF - PullRequest
2 голосов
/ 02 февраля 2009

У меня есть флешка, которая загружает внешние SWF-файлы. Мне нужно иметь возможность переместить загруженный файл SWF на следующий кадр в основной временной шкале.

Вот фрагмент кода:

var request:URLRequest = new URLRequest(file);
loader.load(request);
var swfTimeline:MovieClip = loader.content as MovieClip;
swfTimeline.nextFrame();

Если я запускаю трассировку на swfTimeline, я получаю нулевую ссылку на объект. Я думаю, что нашел способ обойти это, но теперь проблема, с которой я столкнулся, заключается в том, что загруженный SWF-файл - это ActionScript 2, а AS3, похоже, не хочет обрабатывать SWF-файл AS2 как обычный видеоклип.

Ответы [ 6 ]

6 голосов
/ 02 февраля 2009

Сначала необходимо добавить прослушиватель событий в загрузчик, чтобы вы знали, когда загрузка завершится. Итак, из вашего фрагмента кода я бы предложил что-то вроде

var request:URLRequest = new URLRequest(file);
loader.addEventListener(Event.COMPLETE, function(event : Event) : void
{
var swfTimeline:MovieClip = loader.content as MovieClip;
swfTimeline.nextFrame();
});
loader.load(request);

Множество разных способов организовать этот код, но это должно сработать

2 голосов
/ 11 октября 2010

Если вы хотите загрузить символы из Flash во Flex, это должно помочь.

loader.contentLoaderInfo.applicationDomain.getDefinition("here linkage name") as Class

Этот код позволяет размещать мувиклип на сцене, не изменяя сценарий действий на временной шкале (команды остановки в конце анимации и т. Д.) Один из способов использовать это:

var c:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("BA_doors") as Class
_animation = new c() as MovieClip
addChild(_doors)
2 голосов
/ 02 февраля 2009

Используйте свойство содержимого объекта Loader, в который вы загружаете SWF-файл. Например ...

var swfTimeline:MovieClip = loader.content as MovieClip;
swfTimeline.nextFrame();
1 голос
/ 19 января 2010

Должно быть ..

loader.currentTarget.content as MovieClip;
1 голос
/ 02 февраля 2009

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

   swfLoader.addEventListener(Event.COMPLETE, onSwfLoaded);

Как только SWF полностью загрузится, вы больше не получите ноль.

Одна вещь, о которой следует быть осторожным, это то, что даже до того, как вы получите событие COMPLETE, главная временная шкала на SWF начнет работать. Вам понадобится остановить () первый кадр флеш-фильма, чтобы сделать то, что вы пытаетесь сделать ... и даже тогда это может быть проблематично. Иногда основной график имеет собственный разум.

В моем проекте мы недавно решили полностью очистить основную временную шкалу и загрузить фильмы из библиотеки символов ... Загрузка видеоклипов в виде символов дает вам полный контроль, но для правильного размещения их вам придется использовать преобразования ( так как у тебя больше нет главной сцены.)

Пока вы используете видеоклипы AS3 flash9, у вас будет полный контроль со стороны Flex.

Наслаждайтесь!

0 голосов
/ 11 июня 2009

Насколько я знаю, единственный способ для фильма AVM2 (ваш фильм AS3) поговорить с фильмом AVM1 (ваш as2 swf) - это использовать объект LocalConnection.

Что касается вашего первого вопроса - я борюсь с тем же ... Мне нужен доступ к свойству loader.content до того, как завершится событие.

Удачи!

С уважением,

Chris

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...