众所周知,Flash Player 9中为了解决兼容性问题,内置了两个虚拟机。AVM1来对付AS1.0&2.0,AVM2用来专门处理AS3.0。(注: 本文中ActionScript 均简写成AS)
用AS3.0中的SWFLoader来装载swf, img非常方面爽快。于是黑羽就想到一个问题:
可不可以用SWFLoader来装载使用AS2.0的组件(或1.0)编译过的swf呢?
可不可以通过AS2.0来装载AS3.0的swf呢?如果可以,那么海量的Flex2组件会让大家爽死!
如果可以的话,那岂不是可以轻松重用以前编的2.0组件了吗?
如果真的可以,那么虚拟机到底怎么工作呢?AVM2与AVM1通信??![]()
经过黑羽的探索、试验、查询资料后,答案是折衷的,不是很爽。
听俺慢慢道来:
1.使用AS3.0确实可以加载AS2.0 或者 1.0的swf。但是AS3.0不可以访问加载swf中变量和函数。为了方便理解,我们可以想成两个虚拟机并行工作,但是不能通信。事实上,我猜实现机制可能就和这个差不多。LocalConnection。
2.使用AS2.0或1.0编写的swf是不可以加载AS3.0的。换句话说Flash 8&Flex 1.5及之前所有工具生成的swf都不可以加载(load)AS 3.0 swf的。
3.如果想让AS2.0或1.0的swf与AS3.0 swf协同工作,那么AS2.0&1.0的文件必须进行移植。就是说转成3.0。黑羽在yy:不知道Blaze出来后会不会有另存为自动转换成AS3.0的功能,霍霍。![]()
4.单个的swf文件中是不能混合使用AS3.0&AS2.0(或者1.0)的。 不会像AS2.0&1.0那样混用了,毕竟是AS2.0&AS3.0是两个不相同的虚拟机。
一句话总结,就是Flash Player 9(AS3.0)可以加载以前的所有版本的swf,但是只是简单加载,不能访问AS2.0(或1.0)的swf内部变量&函数,无法交互。![]()
如果一定要和AS2.0或1.0的swf通讯的话,只能使用ExternalInterface类,具体教程看
http://www.flex2.org/node/97







Comments (13)
听说你是个高手,哈哈。帮个忙吧。问题如下。。。诚心请教。http://bbs.flash8.net/forums/1849107/ShowPost.aspx
Posted by 春天的粪球 | June 7, 2006 11:43 PM
Posted on June 7, 2006 23:43
回了。
Posted by 黑羽 | June 8, 2006 12:18 AM
Posted on June 8, 2006 00:18
大不了到3.0出来的时候重写代码好了~
目前还有一个很大的问题,就是Flash Player8.0还没完全普及,Adobe Player9.0就有袄出来了~
哎!
真郁闷。
Posted by ishowing | June 8, 2006 2:05 PM
Posted on June 8, 2006 14:05
晕死。我现在才开始学2.0呢。。晚了?唉。。。
Posted by 春天的粪球 | June 8, 2006 10:51 PM
Posted on June 8, 2006 22:51
no touch 3.0 ~ yet.
Posted by aw | June 9, 2006 7:40 PM
Posted on June 9, 2006 19:40
3.0确实更加强大,高效的说。其中Traits Object的设计确实由非常值得称道的地方,使存储容量和搜寻引用的速度成倍提高。
而且编程语法上面也更加严谨。^^
Posted by 黑羽 | June 12, 2006 9:24 AM
Posted on June 12, 2006 09:24
多谢~我看了你的文章放心了``原来如此。
Posted by 愁 | October 1, 2006 8:15 PM
Posted on October 1, 2006 20:15
AVM1 and AVM2 can be communicated by external interface. Check it out:
http://www.flex2.org/node/97
Posted by deng | November 22, 2006 12:52 AM
Posted on November 22, 2006 00:52
to deng, 啊,才看到,thx。
是的,能干的external interface是可以的。就是对AS3 swf 和AS2 swf都太麻烦。
^_^
Posted by 黑羽 | April 26, 2007 10:41 AM
Posted on April 26, 2007 10:41
黑羽兄弟,请教一个问题:flash里面怎么把两个窗口融合在一起,中间不留黑线?举个例子tab控件,我们可以模拟tab控件,在一个大窗口上面并排放几个小按钮,这几个小按钮就模仿tab健。现在问题是:这些按钮和主窗口没有办法融合,很难看。有的人说可以通过去掉按钮的边来实现,我没找到这个方法。
如果您你知道,请告知我一下。
Posted by stanleycao | July 4, 2007 5:46 PM
Posted on July 4, 2007 17:46
呵呵~听黑羽话,跟党走.
具体还是不怎么明白AS3和AS2的具体格式要求和语句变动..
Posted by 风雨破老鼠 | July 9, 2007 5:25 AM
Posted on July 9, 2007 05:25
国内有没有好的AS3的教材,黑羽哥,可不可以推荐几本来读读!
Posted by HooPower | July 13, 2007 1:20 PM
Posted on July 13, 2007 13:20
诚招:兼职程序员
条件要求:
1.熟练使用Adobe Flex, AIR 以及 actionscript 3的编程
2.熟练php/mysql编程的优先考虑。
3.有良好的英文技术文档阅读能力和习惯;具有较强分析、解决应用问题的能力。
工资待遇:薪酬面议
北京2375工作室由热爱计算机软件事业的青年人组成并致力于专业领域软件的研发和销售。工作室给每一位加盟者提供充分发展和自由创作的空间。不管您是已经工作的行业精英,还是正在上学的莘莘学子都可以加入到我们的行列中来。
现因所开发项目的需要,特长期招聘兼职程序员。有意者请发简历至studio2375@gmail.com 同时附上一两个自己写的,可以表现自己水平的Adobe Flex/AIR样本程序。
黑羽哥能否加盟?或者介绍别人来加盟?多谢了
Posted by 周游 | September 24, 2007 7:03 PM
Posted on September 24, 2007 19:03