1

冰雹,堆栈!

我在弄清楚如何直接在 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独立于其他人的班级。它将扩展SuperClassSWC/SWF 内部的一个类...

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

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

如果我设置库路径,这将成为可能......

4

2 回答 2

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

希望这对您仍然有用!坦率

于 2011-03-13T13:13:47.557 回答
0

你为什么说“这条线行不通,当然……”?你几乎是对的,只是遗漏了一些东西。

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

然后您可以将数据作为 ByteArray 获取:

var data:ByteArray = new SWC();
于 2011-03-13T04:49:53.487 回答