as2和as3之间的通信

时间:2010-03-16 15:26:29

标签: flash actionscript-3 actionscript-2

我在'as2.swf'

的按钮下面有这个代码
on (release) {
unloadMovie(this);  
}

并且这个swf被加载到名为“main.swf”的as3容器中,但是当我按下它时没有任何反应,文件也没有自行卸载。任何人都可以启发我吗?

1 个答案:

答案 0 :(得分:4)

ActionScript 3使用AVM2虚拟机,而ActionScript 2使用旧版AVM。这意味着它们不在同一个沙箱中。因此,两者之间的沟通充其量是困难的。

AVM2(as3)可以加载和使用AVM1(as2),但AVM1无法加载AVM2。

以下是两者之间如何沟通的示例:

AS3示例:

import flash.net.LocalConnection;
import flash.display.Stage;

var receiverLC:LocalConnection = new LocalConnection()

receiverLC.connect("__myConnection");

receiverLC.client = this;  

var request:URLRequest = new URLRequest("as2Movie.swf");

var loader:Loader = new Loader();

loader.load(request);

mainLoader_mc.addChild(loader);
. 
function changeSpeed(speed:Number):void {

stage.frameRate=speed

}

AS2示例:

var sending_lc:LocalConnection=new  LocalConnection()

function changeSpeed(num:Number){

sending_lc.send("__myConnection", "changeSpeed",num);

}

关键是AS2必须将命令传递回AS3 - 关键是这一行:

sending_lc.send("__myConnection", "changeSpeed",num);

因此,不要依赖AS2操作,而是将您的操作发送到AS3容器。

示例来自:http://flashgosu.com/?tag=as2-to-as3-avm1-to-avm2