从网上找到一个swf文件,想测试在as3的工程中引用它,但是按照正常的加载swf代码执行时,弹出了异常TypeError: Error #1034: Type Coercion failed: cannot convert flash.display::AVM1Movie@2c33f31 to flash.display.MovieClip.
at Function/<anonymous>()[C:\Users\Administrator\Adobe Flash Builder 4.7\test\src\test.mxml:86]
。原来这是由于要加载的swf文件的as版本不是3引起的。
那么可以用如下方法加载该文件,但是加载后只能显示该swf文件,无法使用movieclip的停止和播放方法对它进行操作,代码如下
var loader1:Loader = new Loader();
loader1.load(new URLRequest("ad_85c71d6182a44284.swf"));
loader1.contentLoaderInfo.addEventListener(Event.COMPLETE,function(event:Event):void{
movie.addChild(loader1);
stage.addChild(movie);
});
那么如果要同时实现对该swf进行操作应该如何呢?从网上找到的一个网友提供的solution,不过自己还没有进行验证,可以参考一下,以下是原网友的文章的一段文字:
1.使用JS做为中转,在页面中实现通讯。
示例:
缺点:要依赖页面,单独不能使用。
2.使用ShareObject做为中转。
缺点:操作起来比较麻烦。
3.使用LocalConnection做为中转。
示例:http://www.6dn.cn/blog/default.asp?id=81
个 人觉得LocalConnection还是比较不错的解决方法。接下来介绍的是我写的Avm1Loader类,使用了LocalConnection,为 什么写了一个类呢?我们都知道,使用LocalConnection不单单要在as3中写代码,as2中也同样要相应的代码以便互相调用,可有时候as2 版本的swf已经导出无法修改,此时你不可能再反编译再在里边加个LocalConnection吧(如果真这样做那也没办法)?这个你就需要一个as2 版本的swf壳~,先把壳加载进来,然后再用壳加载目标swf,通过实验,这个方法是可取的。