如何在Flex中嵌入SWF并在嵌入式SWF中获取时间轴代码?

时间:2010-05-26 20:22:26

标签: flex flash embed

我的客户希望将所有资源嵌入到我使用Flex创建的主SWF中。 UI本身起源于必须具有时间轴动作脚本(AS3)的.FLA。在嵌入SWF之后,嵌入式SWF中似乎没有时间轴AS。这有可能解决吗?

我这样嵌入:

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 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中有一个stop();在第1帧中,以及第2帧中的一些代码。 我在两个帧中都进行了跟踪,但Flex(4)调试器中没有显示任何内容。 将swf添加到阶段后,我在TemplateBase类中执行play()。

事情是,加载的SWF中的游戏和所有AS代码都完全死了。

我的问题是:有没有办法在嵌入式SWF中保留时间轴AS代码?是的,我需要将SWF嵌入到Flex主文件中:/

谢谢, 罗布

1 个答案:

答案 0 :(得分:1)

从我在代码中看到的,您正在执行异步的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;  
}