2011-03-12 41 views
1

Hail,Stack!在ActionScript中編譯時嵌入/導入SWC,無需設置庫路徑

我在計算如何直接在ActionScript中導入SWC文件時遇到了一些問題,無需設置文件的庫路徑。

爲了舉例說明,我需要的是這樣的:

package 
{ 
    [Embed(source = 'Library.swc')] // This line won't work, of course... 

    import ClassInsideSWC; 

    public class MyClass extends ClassInsideSWC 
    { 
     public function MyClass() 
     { 
      super(); 
     } 
    } 
} 

再說,我不想(我不能,其實)與Loader類加載它導入SWC。

那麼,有人知道只使用ActionScript代碼鏈接到SWC的方法嗎?


編輯

我想補充有關問題的詳細信息,我會展示我的更多的細節情景......

我有一個類​​是西港島線是獨立於其他。 它將擴展在SWC/SWF內的類SuperClass ...

此SWC/SWF具有整個框架。 我無法編譯單個SWF中的每個類。 我的框架的每個部分都是一個SWF,它們將在運行時由Loader類下載。

不幸的是,@frankhermes答案將無法正常工作。 該方法不會下載類,也不允許我在SWC內部擴展或使用其他類。

如果我設置庫路徑這成爲可能......

回答

3

肖恩藤原的回答一個可能的修正:

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")] 
public var SWC:Class; 

可能需要:

​​

編輯:作爲後續的後續評論,這是另一種嘗試,在得到一個可以接受的答案:

package 
{ 
    import flash.display.Sprite; 

    public class SWCTest extends Sprite 
    { 
     public function SWCTest() 
     { 
      var extended:ExtendedCrumbs = new ExtendedCrumbs(); 
     } 
    } 

} 

[Embed(source="../swfs/assets.swf", symbol="assets.Crumbs")] 
class CrumbsInSWC 
{ 

} 

class ExtendedCrumbs extends CrumbsInSWC 
{ 
    public function ExtendedCrumbs() 
    { 
     super(); 
    } 

    // override something here 
} 

可悲的是它只能與SWF文件,不適用於SWC的,因爲使用SWC時,你不能使用symbol="..."嵌入報表內。但上面的代碼確實可以編譯。將swf文件放置在項目中的任何位置,並調整Embed語句內的源路徑。

希望這對你仍然有用! Frank

+0

@Sean和@frank,謝謝你們,但我不認爲Embed標籤在類定義之外工作。我不能把它放在我的課堂裏面,因爲我需要擴展一個SWC內部的類... – NemoStein 2011-03-14 12:27:28

+0

This [Embed ...],它下面的班級工作。一旦你有了這門課程,你就可以將它擴展到另一門課程中。儘管在編譯時,.swc確實需要在您的項目中。所以實際上把它放在你的圖書館路徑上會容易得多。你爲什麼不能那樣做? – frankhermes 2011-03-16 19:24:15

+0

@frankhermes - 因爲我正在開發一種框架,內容將由人創建......也許愚蠢的人......也許,像一扇門一樣愚蠢!因此,我無法教導每個門在庫路徑中添加SWC ... ps:如果您可以使其工作,請創建一個.as文件並用它回答問題。我會很樂意接受正確的,如果它的工作... – NemoStein 2011-03-16 21:09:26

0

你爲什麼說「這條線將無法正常工作,當然......」?你幾乎是對的,只是錯過了一些東西。

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")] 
public var SWC:Class; 

然後你就可以把得到的數據爲ByteArray:

var data:ByteArray = new SWC();