2011-03-12 33 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();