Как встроить SWF во Flex и получить код временной шкалы во встроенном SWF? - PullRequest
1 голос
/ 27 мая 2010

мой клиент хочет, чтобы все ресурсы были встроены в основной SWF, который я создаю с помощью Flex. Сам пользовательский интерфейс формирует .FLA, который должен иметь сценарий временной шкалы (AS3). После того, как я внедрил SWF, кажется, что во встроенном SWF НЕТ временной шкалы AS. Возможно ли это решить?

Я вставляю так:

public var templ: TemplateBase;

<code>
[Embed(source="images/template_banner.swf", mimeType="application/octet-stream")]
public var TemplateSWF:Class; 
</code>
...

var ba : ByteArray = new TemplateSWF() as ByteArray;
var l : Loader = new Loader();
l.loadBytes(ba); 
l.addEventListener(Event.ADDED_TO_STAGE, onTemplateAdd);
addChild(l);

private function onTemplateAdd(evt:Event):void{
  templ  = evt.target.contentLoaderInfo.content;
}

В template_banner.swf есть стоп (); в кадре 1 и некоторый код в кадре 2. Я прослеживаю в обоих кадрах, но в отладчике Flex (4) ничего не отображается. После добавления swf на сцену я выполняю play () в классе TemplateBase.

Дело в том, что игра и весь код AS в загруженном SWF полностью мертв.

Мой вопрос: есть ли способ сохранить код AS временной шкалы в SWF-файле embedde? И да, мне нужно встроить SWF в основной файл Flex: /

Спасибо, Роб

1 Ответ

1 голос
/ 28 января 2013

Из того, что я вижу в коде, вы выполняете loadBytes, который является асинхронным ... и затем ожидаете ADDED_TO_STAGE, и в приемнике событий вы получаете доступ к содержимому ...

Поскольку loadBytes является асинхронным, следует дождаться завершения загрузки. В полном слушателе вы должны получить доступ к загруженному контенту. Я бы полностью избежал ADDED_TO_STAGE.

сделай так:

public var templ: TemplateBase;

[Embed(source="images/template_banner.swf", mimeType="application/octet-stream")]
public var TemplateSWF:Class; 

var ba : ByteArray = new TemplateSWF() as ByteArray;

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.loadBytes(ba); 

private function completeHandler(event:Event):void {
  templ  = evt.target.contentLoaderInfo.content;  
}
...