2013-10-18 96 views
0

我有一些問題與加載的SWF文件之間共享/使用/訪問變量/函數。 我的prj由main.swf文件和2個swf組成,我在main.swf的第一個init中加載。 我的問題是: 1.how我可以在2.swf使用變量從1.swf(功能在2.swf運行) 我2.how可以打電話從2.swf函數在1.swfas3加載的swf訪問變量

這裏是我用來加載swf的代碼:

var playerMc:MovieClip = new MovieClip(); 
var dbMc:MovieClip = new MovieClip(); 
var m2Loader:Loader = new Loader(); 
var mLoader:Loader = new Loader(); 

startLoad(); 
function startLoad() 
{ 
    //var mLoader:Loader = new Loader(); 
    var mRequest:URLRequest = new URLRequest("./_player/player.swf"); 
    mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadMc); 
    mLoader.load(mRequest); 
    addChild(mLoader); 

    //var m2Loader:Loader = new Loader(); 
    var m2Request = new URLRequest("./_db/db.swf"); 
    m2Loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadMc2); 
    m2Loader.load(m2Request); 
    addChild(m2Loader); 
} 
function loadMc(event:Event):void 
{ 
    if (! event.target) 
    { 
     return; 
    } 
    playerMc = event.target.content as MovieClip; 
    mLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadMc); 
} 

function loadMc2(event:Event):void 
{ 
    if (! event.target) 
    { 
     return; 
    } 
    dbMc = event.target.content as MovieClip; 
    dbMc.x = -400; 
    m2Loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadMc2); 
} 

回答

0

你必須堅持使用應用程序域。 在大多數情況下,您應該在另一個應用程序域中加載另一個swf,但它並不真正與您的問題有關。 從loader,您必須訪問applicationDomain,然後getDefinition。從那裏,你可以獲得課程並在你的主要swf中使用它們。是的,你可以閱讀靜態屬性。 如果您需要實例,您應該訪問loader#內容。它指向已加載的SWF的根目錄。加載的根是SWF - 是加載的swf的主類的實例。

+0

你有這樣的例子嗎?我無法把頭圍住這個。 –

-1

創建一個沒有定義的變量,如

public var MyClass;

正如你可以看到我沒有添加

public var MyClass:Class;

然後在另一個函數寫

this.MyClass = this.mLoader.contentLoaderInfo.applicationDomain.getDefinition( 「NameOfClass」)作爲類;

我不太瞭解這個自己..即時通訊有問題搞清楚,如果你只能訪問公共靜態變量,或者如果它可能訪問正常的公共變量和可能的私人變量,因爲它是創建一個新的同類實例或者你想把它說出來..?

也是你寫上面的代碼..後,當你想改變一個varaibles這通常對我

this.MyClass.RandomVariableName = this.MyClass.RandomVariableName + 1;

類似的東西..