В 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
в качестве настройки компилятора (в таком случае мне интересно, будут ли вызваны ваши статические инициализаторы?).