2011-06-03 137 views
1

對不起,如果這個問題已經得到解答,但我似乎無法在網上找到任何相關示例。我基本上有一個類加載一組MovieClip對象並提供訪問器函數來返回它們。AS3:從函數返回MovieClip

public function getMovieClip(mc:MovieClip):Boolean 
{ 
    if(allFilesLoaded) 
    { 
     mc = fileLoader.content; 

     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

顯然這不起作用,但它給出了我想要做的事情。我只想在對象已經加載的情況下將MovieClip返回給調用代碼。

回答

1

您不能像這樣修改參數。相反,返回了MovieClip這樣的:

public function getMovieClip():MovieClip 
{ 
    if (allFilesLoaded) 
    { 
     return fileLoader.content; 
    } 
    else 
    { 
     return null; 
    } 
} 

然後你可以使用它像這樣,即使讀了MovieClip:

var mc:MovieClip; // defined somewhere 

// later... 
if ((mc = x.getMovieClip())) 
{ 
    // all files were loaded and mc is not null. 
} 
else 
{ 
    // files were not loaded and mc is null. 
} 
+0

我猜這不會拋出一個錯誤?在這種情況下,我可以將返回值分配給調用代碼中的MovieClip並檢查它是否爲NULL? – PeddleSpam 2011-06-03 20:27:25

+0

@PeddleSpam:添加了一個如何使用它的例子。但是,是的,基本上你會檢查返回值是否爲空(而不是用原始函數檢查它是否爲真)。 – poke 2011-06-03 20:28:42

+0

這是一個非常乾淨的解決方案,謝謝^ _ ^這個類已經爲不成功的負載調度了一個事件,但是如果由於某種原因訪問器被調用,我仍然不喜歡有一個「潛在的」錯誤。 – PeddleSpam 2011-06-03 20:33:35

1

試試這個:

// change the allFilesLoaded value to view the other result 
var allFilesLoaded:Boolean = true; 

trace(getMovieClip(null)); 

function getMovieClip(mc:*):* 
{ 
    if(allFilesLoaded) 
    { 
     mc = new MovieClip(); 

     return mc; 
    } 
    else 
    { 
     return false; 
    } 
} 

星號表示返回的數據的類型是未知的,我們都在布爾爲影片剪輯。

如果allFilesLoaded返回mc(MovieClip),否則返回false(布爾值)。

希望有所幫助。

+0

我認爲可以工作,但我將不得不使用一個虛擬變量來存儲返回值,然後用** typeof **來檢查它?使用未定義的返回類型似乎有點混亂。這在C中會簡單得多:P – PeddleSpam 2011-06-03 20:24:57

+0

當你不需要它們時,你不應該有可變的返回值。相反,只需返回null。 – poke 2011-06-03 20:25:45