强制SWC中所有类的编译时链接

时间:2010-06-08 03:06:28

标签: flex flash actionscript-3 swc

使用Flash CS4,我正在制作一款有十几种声音和几首音乐曲目的游戏。为了减少发布/编译时间,我将声音和音乐移动到(外部)SWC中,该SWC位于项目的“库路径”中。这有效,但有一点需要注意......

在我将资产外部化之前,我已经动态地通过使用Sound来获取嵌入声音的getDefinitionByName个对象。

// something like...
var soundSubClass:Class = Class(getDefinitionByName(soundClassName));
var mySound:Sound = new soundSubClass();

但是现在它们位于外部SWC中,我需要对这些类进行“具体”引用,以便像这样加载它们,否则它们不包含在已发布的SWF中,并且存在运行时错误当getDefinitionByName试图获得一个不存在的类时。

所以,我的问题:在Flash Professional CS4中,有没有办法强制包含库的资源,无论它们是否是静态链接的?

FlashDevelop有一个编译器选项“SWC Include Libraries”,这正是我想要的,与“SWC Libraries”选项不同。 “SWC Include Libraries”选项的描述是“将SWC文件中的所有类链接到生成的应用程序SWF文件,无论它们是否被使用。”

(另外,对我来说重要的是所有资产都包含在一个已编译的SWF中。在运行时链接不是我想要的。)

5 个答案:

答案 0 :(得分:4)

不幸的是,我不这么认为。我希望这在CS5中得到修复,但我不会赌它......

当前(加重)标准是在SWC中有一个清单类,它引用库中其余部分的所有根类:

public class MyLibManifest {
    public static function manifest():void {
         var class1:Class = Class1;
         var class2:Class = Class2;
         // etc...
    }
}

然后,在主要的.fla ...

import com.mylibrary.MyLibManifest;

...

var myLibrary:Class = MyLibManifest;

答案 1 :(得分:3)

默认情况下,在Flash CS4 / CS5中没有办法在SWC中插入并嵌入每个类,但您可以通过以下方式执行此操作:

的FlashDevelop

如您所知,此程序的项目属性具有区分以下内容的编译器选项:

  • SWC库:“将SWC文件链接到结果gapplication SWF文件。编译器仅在这些类中链接所需的SWC文件。”
  • SWC包含库:“将SWC文件中的所有类链接到生成的应用程序SWF文件,无论它们是否被使用。”

第二个选项“SWC Include Libraries”可能很有用,因为如果您只是将FLA按原样编译到SWC中,然后将SWC和您的其他SWC作为SWC Include Libraries放入FlashDevelop,它应该编译/合并它们进入一个可以按你想要的方式工作的SWF。

FlashDevelop还可以简单地帮助您在SWC中构建硬编码的类列表,因为如果您在SWC中链接为SWC库,它将显示在项目资源管理器中,您可以看到所有列表SWC中的课程。您也可以右键单击每个类并选择“插入文档”,它将插入完整的类名。如果你这样做,那么按分号输入,你将获得你的第一个类引用。将鼠标悬停在项目设置的类列表中,并对列表中的每个类重复此操作。数百个类只需要几分钟就可以完成,这使得创建这样的列表变得更容易。如果这个东西允许你一次插入多个,那就更快了,但似乎没有。

您说的唯一其他选项是运行时共享库​​(RSL)。单独加载文件真的不是什么大不了的事,但只有在你正确处理加载过程和可能发生的任何错误的情况下。它会给你的项目增加一些复杂性,可能需要一些额外的考虑,但我认真考虑它作为一种选择。有关详细信息,请参阅www.senocular.com/flash/tutorials/contentdomains/?page=2处的“应用程序域继承”部分。

答案 2 :(得分:1)

我可能遗漏了一些东西但是不是使用-include-libraries而不是编译器的library-path选项的情况,这就是adobe doc关于选项的说法

将SWC文件中的所有类链接到生成的应用程序SWF文件,无论它们是否被使用。

将此选项与library-path选项进行对比,该选项仅包括在编译时引用的那些类。

Adobe Documentation

我是所有这一切的新手,所以当你在火焰中射击我时要温柔:)

答案 3 :(得分:0)

您可以在ActionScript属性中提供assets.swc文件的路径,并且该路径应该在运行时工作并加载资源。

答案 4 :(得分:0)

在flex中,只要有权访问编译器选项,就可以使用:-include YourClass强制从swc中链接类,即使它没有从主swf中引用。

但我不知道你是否可以从flash cs4改变编译器选项......