`
fuhuabin
  • 浏览: 2403 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

as3项目中加载as1/2编写的swf文件

阅读更多

从网上找到一个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,通过实验,这个方法是可取的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics