好的,我有一个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”功能中访问它?
谢谢!
答案 0 :(得分:1)
最新的闪存播放器包含两个虚拟机,AVM2用于as3,AVM1用于as2 / as1。因此,当您将as1 / as2 swf加载到flash中时,它的类型为AVM1Movie,它将由AVM1运行。不幸的是,AVM2几乎无法访问在AVM1上运行的对象,事实上,“AVM1Movie对象和AVM2对象之间不允许互操作性(例如调用方法或使用参数)”。
您是否可以访问as1源代码?如果您这样做,我建议每次分数更改时触发事件,您可以在包装器类中侦听这些事件,而不必担心直接访问分数变量。
您可以阅读有关AVM1Movie here
的更多信息