Я пытаюсь использовать библиотеку .SWC (экспортированную из документа .FLA) для хранения графических данных для игры. В одном из своих классов я пытаюсь прикрепить экземпляр MovieClip запрошенного уровня, но я пытаюсь использовать getDefinitionByName(), чтобы я мог выбрать правильный класс на основе номера уровня. Я работаю в Flash Builder 4.7, и рассматриваемый SWC извлекается как библиотека пути сборки, для которой установлено значение «Объединено в код», теоретически и до сих пор на практике, что делает его классы доступными из любого места.
Однако getDefinitionByName() не работает, даже когда я могу подтвердить, что класс, который он оценивает, существует и находится в свободном доступе.
Ниже приведено то, с чем я имею дело в своем конструкторе класса.
1:
public function MyClass() {
var lev:MovieClip = new Level1();
}
2:
public function MyClass(id:uint) { // For this example, id == 1
var lClass:Class = getDefinitionByName("Level"+id) as Class;
var lev:MovieClip = new lClass();
}
Теоретически #1 и #2 должны давать одинаковый результат, а именно, "lev" - это новый экземпляр класса Level1(), верно? Но №1 работает, а №2 выдает ReferenceError: Error #1065: Variable Level1 is not defined.
Что еще более необъяснимо, я также получил почти то же самое для работы в методе того же самого класса, с той лишь разницей, что указанный метод вызывает статический метод другого класса, который, в свою очередь, вызывает getDefinitionByName(). Имеет ли значение статический метод, и если да, то почему?