在ActionScript中编译时嵌入/导入SWC,无需设置库路径

时间:2011-03-12 19:45:21

标签: flash actionscript-3 embed swc compile-time

冰雹,堆叠!

我在如何直接在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的方法吗?


被修改

只是要添加有关该问题的更多信息,我将展示我的方案,其中包含更多详细信息......

我有一个班级SubClass,可以独立于其他班级。 它将扩展SWC / SWF中的类SuperClass ...

这个SWC / SWF有整个框架。 我无法在单个SWF中编译每个类。 我的框架的每个部分都是SWF,并且将在运行时由Loader类下载。

可悲的是,@ frankhermes的回答是行不通的。 该方法不会下载类,也不允许我在SWC中扩展或使用其他类。

如果我设置了库路径,那么这就成为可能......

2 个答案:

答案 0 :(得分:3)

Sean Fujiwara答案的可能修正:

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

可能需要:

[Embed(source="SWFWireDecompiler.swf", symbol="ClassInSWC")]
public class ClassInSWC
{
   ....
}

编辑:作为评论后的后续行动,这是获得可接受答案的另一种尝试:

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时你不能在Embed语句中使用symbol="..."。但上面的代码确实编译。将swf文件放在项目的任何位置,并调整Embed语句中的源路径。

希望这对你有用!弗兰克

答案 1 :(得分:0)

为什么你说“这条线路不起作用,当然......”?你几乎是对的,只是缺少一些东西。

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

然后你可以把数据作为ByteArray来获取:

var data:ByteArray = new SWC();