我的客户希望将所有资源嵌入到我使用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主文件中:/
谢谢, 罗布
答案 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;
}