2010-11-14 32 views
0

我正在FB4中製作一個AS3項目。在我們的工作流程中,我們讓藝術家將藝術品編譯成SWC文件,然後我將其鏈接爲FB4中的「參考庫」。如何有效加載SWF庫?

然後我設置的SWC文件的「鏈接類型」設置爲「外部」,而不是合併成代碼。這應該創建與輸出文件夾中的SWC文件相對應的SWF,對吧?

這似乎並非如此。我只看到一個SWF文件:main_app's。

我試圖讓這個我可以使用a library manager動態加載的文件。

我試圖手動提取的主權財富基金,但似乎仍然main_app編譯所有的SWCS本身。我確保鏈接類型設置爲外部。 「external」和「merged to code」之間main_app的文件大小似乎相同。

回答

1

我在Flash Builder 4中,我得到了SWC-的唯一方法做了一個簡單的項目> SWF發生的事情是通過創建一個Flex項目,而不是ActionScript項目中,選擇「運行時共享庫​​(RSL)」,而不是「外部」。這是因爲Flex框架有一些類可以爲你加載這些庫。它也自動轉換(我應該說提取)的過程。

現在,如果您不想爲此創建Flex項目,則可以自行提取SWF。 SWC文件格式只是一個包含SWF和描述內容的XML文件的Zip。然後,您可以使用加載程序動態加載此提取的SWF文件,並設置正確的Application Domain。這是我的示例項目的一個片段。

public class Web extends Sprite 
{ 
    public function Web() 
    { 
     //you will not be able to instantiate classes of your library until it's loaded 
     var loader:Loader = new Loader(); 
     loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadComplete); 
     loader.load(new URLRequest("library.swf"), new LoaderContext(false, ApplicationDomain.currentDomain)); 
    } 

    protected function onLoadComplete(event:Event):void 
    { 
     //here you can create instances of classes defined in your library 
     new Asset(); 
    } 

} 

你可能會認爲這是一個非常繁瑣的工作,以解壓縮+每次你的設計更新庫時拷貝。您可以使用腳本或Ant文件自動執行此過程。不幸的是,除非我錯過了某些東西,否則它看起來像Flash Builder不希望您擴展構建過程,因此您仍然需要一些手工工作或完全轉換爲Ant(或類似的東西)來構建。

祝你好運!

+0

或者,可以將swc文件加載到bytearray中,使用一些zip庫從其中提取swf文件,並將其加載到所述ApplicationDomain中 - 全部在actionscript中。 – alxx 2010-11-14 08:55:40

+0

@alxx好主意。我會試試這個。 – subb 2010-11-15 01:21:26

0

從SWC添加到您的圖書館的那一刻,你應該能夠通過直接調用其特定的類名來訪問SWC的資產。不需要嘗試獲取SWF並使用Loader類加載它。這實際上首先破壞了使用SWC的目的!

比方說,在你的SWC,你有一個影片剪輯與GraphicAsset的類名,創建一個新的實例,你只需做到這一點:

var mc:MovieClip = new GraphicAsset(); 

在FB4的文件夾結構,看看您的SWC在參考庫文件夾&中檢查默認包,您應該會看到所有資產的列表。

+1

我想你誤解了這個操作。他希望動態加載資源,而不是用它的應用程序編譯它們。 – subb 2010-11-15 01:19:46