2013-04-19 1 views
0

Я создаю редактор уровней для своей игры и хотел бы иметь доступ к списку всех классов, включенных в мою игру. У меня есть статическая функция в моем главном классе:В 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");  
} 

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

Спасибо,

Варга

+0

Действительно ли ваш класс упоминается где-то в коде? Собираются ли они в SWF? Кроме того, если есть часть библиотеки (SWC), у вас есть больше возможностей для связывания, которые могут повлиять на ответ. –

ответ

0

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

Для этого вы можете использовать ApplicationDomain.getQualifiedDefinitionNames() (docs), но только если вы нацеливаете FlashPlayer 11.3+.

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