0

我正在 FB4 中制作一个 AS3 项目。在我们的工作流程中,我们让艺术家将艺术作品编译成 SWC 文件,然后我将其链接为 FB4 中的“引用库”。

然后我将 SWC 文件的“链接类型”设置为“外部”,而不是合并到代码中。这应该会在输出文件夹中创建对应于 SWC 文件的 SWF,对吧?

情况似乎并非如此。我只看到一个 SWF 文件:main_app 的。

我试图做到这一点,以便我可以使用库管​​理器动态加载文件。

我尝试手动提取 swf,但似乎 main_app 仍将所有 swcs 编译为自身。我确保链接类型设置为外部。“外部”和“合并到代码”之间的 main_app 文件大小似乎相同。

4

2 回答 2

1

我在 Flash Builder 4 中创建了一个简单的项目,唯一让 SWC->SWF 发生的方法是创建一个 Flex 项目而不是 ActionScript 项目,并选择“运行时共享库​​ (RSL)”而不是“外部”。这是因为 Flex 框架有一些类可以为您加载这些库。它还自动化了转换(我应该说是提取)过程。

现在,如果您不想为此创建 Flex 项目,您可以自己提取 SWF。SWC 文件格式只是一个包含 SWF 和描述内容的 XML 文件的 Zip。然后,您可以使用 Loader 动态加载此提取的 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(或类似的东西)来构建。

祝你好运!

于 2010-11-14T05:31:33.953 回答
0

从 SWC 添加到您的库的那一刻起,您应该能够通过直接调用其特定类名来访问 SWC 的资产。无需尝试获取 SWF 并使用 Loader 类加载它。这实际上违背了首先使用 SWC 的目的!

假设,在您的 SWC 中,您有一个类名为 GraphicAsset 的 MovieClip,要创建一个新实例,您只需执行以下操作:

  var mc:MovieClip = new GraphicAsset();

在 FB4 的文件夹结构中,查看 Referenced Libraries 文件夹中的 SWC 并检查默认包,您应该会看到所有资产的列表。

于 2010-11-14T11:36:54.613 回答