2009-07-28 68 views
0

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

我希望父SWF(a.k.a.包装器)能够访问子SWFG(a.k.a.“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); 

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

谢谢!

回答

1

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

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

您可以阅读更多关于AVM1Movie here