2009-07-28 70 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