好的,所以我有一个Flash CS3(+ AS3)程序,该程序正在加载另一个闪存程序(在此示例中称为“ Pacman_main.swf”)。我已经确定这是一个相当古老的SWF,因为它是在Flash 5和AS1中制成的(Yippee!)。

我希望父级SWF(又称包装器)能够访问Child SWFG(又称“ Pacman_main.swf”)的变量,特别是分数。因此,我可以将比分提交给第三方PHP/MySQL DB等等。

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> list变量构建包装器后。该分数是一个变量,列出为“变量_level0.instance5.instance5.instance6.score = 180”,在游戏中获得18个PAC点。如何在“ checkScore”功能中访问它?

谢谢!

有帮助吗?

解决方案

最新的Flash播放器中有两台包装的虚拟机,AS3的AVM2和AS2/AS1的AVM1。因此,当您将AS1/AS2 SWF加载到Flash中时,它是AVM1Movie的类型,该类型将由AVM1运行。不幸的是,AVM2几乎无法访问AVM1上运行的对象,实际上,“允许允许AVM1Movie对象和AVM2对象之间的互操作性(例如调用方法或使用参数)”。

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

您可以阅读有关AVM1Movie的更多信息 这里

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top