如何有效加载SWF库?

时间:2010-11-14 03:46:29

标签: actionscript-3 swc

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

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

似乎并非如此。我只看到一个SWF文件:main_app's。

我试图制作它,以便我可以使用a library manager动态加载文件。

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

2 个答案:

答案 0 :(得分:1)

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

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

祝你好运!

答案 1 :(得分:0)

从SWC添加到您的资源库的那一刻起,您就可以通过直接调用其特定的类名来访问SWC的资产。没有必要尝试获取SWF并使用Loader类加载它。这实际上违背了首先使用SWC的目的!

让我们说,在您的SWC中,您有一个类名为GraphicAsset的MovieClip,要创建一个新实例,您只需执行此操作:

  var mc:MovieClip = new GraphicAsset();

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