2009-05-22 78 views
1

當我構建一個用於minigames的Flex框架時,我計劃將一堆圖形資源(動畫片段符號)捆綁到一個swf文件中,我將其加載到我的Flex應用程序中,然後從swf文件中提取符號以供使用在我的應用程序。我的問題是:我如何通過actionscript來做到這一點?從swf文件中提取資產?

謝謝!

回答

1

如果您不想使用EMBED並且您不想在運行時加載資源,我建議您將SWF導出爲SWC。

這樣,您可以從actionscript中瀏覽SWC文件。您可以在編譯時檢查另一個動畫片段內的子動畫片段是否存在。

-library-path C:\path\to\your\file.swc 

如果您使用FDT你有一個選項來自動添加SWC作爲參數:

如果您正在使用Flex編譯器,然後當你編譯記得添加此。

這裏是a demo關於如何使用FDT做到這一點。不確定你使用哪個工具。如果它是商業Flex Builder,則過程應該類似。

我想這就是你要找的。

+0

+1對於推薦SWC方法 - 我其實並沒有想到那個。在某些情況下,無需運送額外的SWF可能是一個優勢,但對於基於Web的應用程序,它也可能導致更大的SWF。儘管如此,根據具體情況,可以提醒它是一種選擇。 – 2009-05-22 20:36:26

0

我會嘗試創建一個資產/圖標庫AS文件。

東西沿着

package 
{ 

public class IconLibrary 
{ 

    /* 
    * Framework Icons 
    */ 

    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_icon")] 
    public static const clapperBoardIcon:Class; 
    [Embed (source="../assets/fof_graphics.swf", symbol="clapperboard_over_icon")] 
    public static const clapperBoardOverIcon:Class; 
    [Embed (source="../assets/fof_graphics.swf", symbol="close_button")] 
    public static const closeButton:Class; 
    [Embed (source="../assets/fof_graphics.swf", symbol="close_over")] 
    public static const closeOverButton:Class; 

    public function IconLibrary() 
    { 
    } 

    } 

} 

線然後,所有你需要做的是

source="{IconLibrary.clapperBoardIcon}" 

,或者您希望顯示的資產的任何名稱。

0

地塊的位置不錯的解決方案,這裏有一個,如果你在運行時加載的SWF文件,並要提取的資產,你可以做你的裝載機以下完整的事件偵聽器:

var c:Class = Class(LoaderInfo(e.target).applicationDomain.getDefinition("myClassDefinitionName")); 

這將存儲資產從swf作爲Class對象,因此您可以創建它的實例,如下所示:

var asset:MovieClip = new c();