AS3包装器访问AS1变量

时间:2009-07-28 15:23:51

标签: actionscript-3 wrapper flash-cs3 loader

好的,我有一个Flash CS3(+ AS3)程序正在加载另一个flash程序(在本例中称为“pacman_main.swf”)。我已经确定这是一个相当古老的SWF,因为它是在Flash 5和AS1(yippee!)中制作的。

我希望父SWF(a.k.a.包装器)能够访问子SWFG(a.k.a。“pacman_main.swf”)的变量,特别是分数。这样我就可以将分数提交给第三方PHP / mySQL db blah blah。

function checkScore() {
    // Get the score and submit it
}

submitScore.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
function mouseDownHandler(event:MouseEvent):void {
    checkScore();
}

var loader:Loader = new Loader();
loader.load(new URLRequest("pacman_main.swf")); 
addChildAt(loader, 0); 

我知道得分的变量名称,使用Debug>构建包装器后列出变量。在得到18个pac-dots之后,得分是一个变量,列为“Variable _level0.instance5.instance6.score = 180”。我如何在“checkScore”功能中访问它?

谢谢!

1 个答案:

答案 0 :(得分:1)

最新的闪存播放器包含两个虚拟机,AVM2用于as3,AVM1用于as2 / as1。因此,当您将as1 / as2 swf加载到flash中时,它的类型为AVM1Movie,它将由AVM1运行。不幸的是,AVM2几乎无法访问在AVM1上运行的对象,事实上,“AVM1Movie对象和AVM2对象之间不允许互操作性(例如调用方法或使用参数)”。

您是否可以访问as1源代码?如果您这样做,我建议每次分数更改时触发事件,您可以在包装器类中侦听这些事件,而不必担心直接访问分数变量。

您可以阅读有关AVM1Movie here

的更多信息