В AS3, как запустить код, когда начинается фильм?

Я делаю редактор уровней для своей игры и хотел бы иметь доступ к списку всех классов, включенных в мою игру. У меня есть статическая функция в моем главном классе:

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");     
}

Однако статические инициализаторы вызываются только при первом использовании класса. Есть ли у класса способ заставить себя быть использованным в самом начале игры? Я знаю, что мог бы явно перечислить все зарегистрированные классы в главном файле, но это неоптимально в том смысле, что основной файл нужно будет редактировать всякий раз, когда добавляется новый класс, который хочет зарегистрироваться.

Спасибо,

Варга

1 ответ

Перечислите все определения классов в ApplicationDomain и отфильтруйте их в соответствии с соглашением об именах или типом (интерфейс?).

Чтобы достичь этого, вы можете использовать ApplicationDomain.getQualifiedDefinitionNames() ( документы), но только если вы нацелены на FlashPlayer 11.3+.

В качестве примечания, вы ДОЛЖНЫ ссылаться на этот класс где-нибудь, как на поле класса, чтобы компилятор знал, что он должен включить этот класс в SWF. Вы также можете поместить классы, на которые хотите ссылаться, в библиотеку SWC и использовать -compiler.include-libraries в качестве настройки компилятора (в таком случае мне интересно, будут ли вызваны ваши статические инициализаторы?).

Другие вопросы по тегам