【问题标题】:In AS3, how do I run code when a when the movie starts?在 AS3 中,如何在电影开始时运行代码?
【发布时间】:2013-04-19 21:20:48
【问题描述】:

我正在为我的游戏制作关卡编辑器,并希望能够访问包含在我的游戏中的所有类的列表。我的 Main 类中有一个静态函数:

public static function register(c:Class, category:String):void {
    if (classRegister[category] == null) {
        classRegister[category] = new Array();
    }           
    classRegister[category].push(c);        
}

然后,在我想注册的每个类中,我都放了一个静态初始化器:

{           
    Main.register(prototype.constructor, "motion");     
}

然而,静态初始化器只会在类第一次被使用时被调用。有没有办法让一个类在游戏开始时强制自己被使用?我知道我可以在主文件中显式列出所有已注册的类,但这是次优的,因为每当添加需要注册的新类时都必须编辑主文件。

谢谢,

瓦尔加

【问题讨论】:

  • 你的类实际上在代码中的某处被引用了吗?它们是否被编译到 SWF 中?此外,如果有部分库 (SWC),您有更多可能影响答案的链接选项。

标签: actionscript-3 class static initialization initializer


【解决方案1】:

列出 ApplicationDomain 中的所有类定义,并根据命名约定或类型(接口?)过滤它们。

要实现这一点,您可以使用ApplicationDomain.getQualifiedDefinitionNames() (docs),但前提是您的目标是 FlashPlayer 11.3+。

附带说明,您必须在某处引用此类作为类字段,以便编译器知道它必须在 SWF 中包含此类。您还可以将要引用的类放在 SWC 库中,并使用 -compiler.include-libraries 作为编译器设置(在这种情况下,我想知道您的静态初始化程序是否被调用?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2022-06-16
    • 2022-11-02
    相关资源
    最近更新 更多