0

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

我希望父 SWF(又名包装器)能够访问子 SWFG(又名“pacman_main.swf”)的变量,特别是分数。这样我就可以将分数提交给第 3 方 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); 

我知道分数的变量名称,在构建包装器后使用“调试”>“列表变量”。分数是在游戏中获得 18 个 pac-dots 后列为“变量_level0.instance5.instance6.score = 180”的变量。我将如何在我的“checkScore”函数中访问它?

谢谢!

4

1 回答 1

1

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

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

您可以在此处阅读有关 AVM1Movie的更多信息

于 2009-07-28T15:37:47.040 回答