我一直都以为Flex里面可以loader flash编译的swf,而倒过来不行。这样的错误认知是建立在几次不成功的尝试以及朋友之间的交流。
但其实,从原理上来说,这是不可被理解的,大家都是swf,用的都是同一个虚拟机,虽然实现不同,但是底层是相同的。
所以,今天我和我的同事又再次尝试了一次,出乎我的意料,丝毫没有周折的,flash 很容易的loader了flex编译的swf,我有点脸红,并开始反思原因,为什么我之前都会失败呢?
实现的代码相当之简单
package {
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLRequest;
[SWF(width="320", height="320",frameRate="24",backgroundAlpha="0")]
public class test1 extends MovieClip
{
private var _loader:Loader
public function test1()
{
this._loader = new Loader()
this._loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete)
this._loader.load( new URLRequest("flexTest.swf"))
}
private function onComplete(e:Event):void
{
this.addChild( e.target.content );
}
}
}
其实问题出在 this.addChild( e.target.content );经过测试发现,当loader成功,而不将loader进来的对象加入显示列表的时候就会报错,而我之前几次的尝试都没有做这一步,这是一个很小的问题,发一篇blog,一来感谢我的同事,二来郑重的更正我之前认识。