2011-08-20 20 views
0

現在我的工作,需要一個AS2代碼:訪問嵌入式swf中的變量? (AS2)

  • 加載另一個SWF AS2。
  • 在加載的SWF上方顯示另一個MovieClip。
  • 在加載的SWF的MovieClip中訪問變量。

這裏是我的代碼,現在:

loadMovieNum("player.swf",5); 
    delay = function() { 
    var first:MovieClip = _root.attachMovie("OnTop","nf",10); 
    trace(_root.nf); 
    trace(_layer5); 
    clearInterval(delayi); 
    } 

delayi = setInterval(delay, 3000); //3 seconds to let the video load. 

我想上面顯示已加載的SWF(之「ontop的」是我給了一個象徵符號,其類型爲影片剪輯名稱),但是會發生什麼情況是視頻顯示超出其他所有內容,並且跟蹤輸出是:

_level0.nf 
undefined 

我在做什麼錯?爲什麼新的MovieClip沒有顯示在加載的上面? 然後,在我加載SWF之後,如何訪問其主MovieClip中的變量?

謝謝。

回答

0

我會親自做這個用的MovieClipLoader。使用定時器來承擔負載持續時間是非常危險的,因爲它會創建競爭狀態,連接速度非常慢的用戶將失敗。

這是使用的MovieClipLoader和委派,以保持活動功能您的本地代碼的其餘部分的範圍,就像做的addEventListener在AS3一個簡單的例子。首先,要加載的SWF,我稱之爲「child.swf」。這包含動畫和上框架1,它定義所謂的「你好」的字符串變量:

var hello:String = "Hi"; 

在我們將有加載器代碼父SWF,和庫項目以「MC1」的識別符,這將附加到加載的SWF上方的舞臺上。

//grab Delegate to mimic AS3 event handler scope 
import mx.utils.Delegate; 
//create container for the loaded SWF 
var loadedMC:MovieClip = createEmptyMovieClip("loadedMC",5); 
//create the loader (don't cast it though, or you can't directly access the events) 
var loader = new MovieClipLoader(); 
//set up a listener for the load init (called when the first frame of the loaded MC is executed) 
loader.onLoadInit = Delegate.create(this, onMovieInit); 
//start loading 
loader.loadClip("child.swf",loadedMC); 
//init handler 
function onMovieInit() 
{ 
    //create the next layer from the library 
    var firstMC:MovieClip = attachMovie("mc1","newName",10); 
    //trace var from loaded mc 
    trace(loadedMC.hello); // hi 
} 

當目標SWF加載和第一幀已經被處理,也就是說,在第一幀上的任何代碼現已向父SWF的MovieClipLoader調用onLoadInit功能。將調用委託給onLoadInit而不是使用監聽器對象作爲官方文檔,希望您不再需要在處理函數中使用_root,因爲函數的作用域沒有改變。