使用Flash CS4,我正在制作一款具有十几种声音和几首音乐轨道的游戏。为了减少发布/编译时间,我将声音和音乐移到了(外部)SWC中,该SWC位于项目的“库路径”中。这行得通,但有一点警告...

在将 Assets 外部化之前,我一直通过使用Sound获取它们的类来动态实例化嵌入声音的getDefinitionByName对象。

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

但是,既然它们位于外部SWC中,则我需要对这些类具有“具体”引用才能像这样加载它们,否则它们将不包含在已发布的SWF中,并且getDefinitionByName尝试时会出现运行时错误得到一个不存在的类。

因此,我的问题:在Flash Professional CS4中,是否有任何方法可以强制包括库的 Assets ,无论它们是否是静态链接的?

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

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

最佳答案

不幸的是,我不这么认为。我希望这在CS5中已解决,但我不会打赌...

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

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;

10-07 23:17