Просмотр полной версии : Создание экземпляра класса по строке с именем
Есть набор классов, которые расширяют один интерфейс. Есть метод который создает экземпляр одного из классов, в зависимости от строки содержащей имя. Как это реализовать?
public function createItem(name:String):IItem // name = "Label" gui.items.Label.as
{
return new (name as Class)(); //естественно не пашет
}
возможно ли?
getDefinitionByName мб?
public function createItem(name:String):IItem
{
return new (getDefinitionByName( name ) as Class)();
}
Блин. Точно. Что то я заработался))) Спасибо!
warez_men
01.08.2012, 14:53
А пользовательский классами не получается :(
var LavelName:String = "Level" + _levelNumber;
//"src.Levels::Level
var linkClassName:Class = getDefinitionByName(LavelName) as Class;
ругается
[Fault] exception, information=ReferenceError: Error #1065: Переменная Level1 не определена.
Если выше напишу trace("getQualifiedClassName="+getQualifiedClassName(Level1))
То работает но при таком раскладе пользы от этой функций очень мало помогите решить эту проблему.
То работает но при таком раскладе пользы от этой функций очень мало помогите решить эту проблему
var tmp1:Level1;
var tmp2:Level2;
var tmp3:Level3;
warez_men
01.08.2012, 15:23
GBee,Думул об этом но у меня около 100 уровней и каждый так прописывать не красиво...
Level1 вкомпиливается в конечную флешку?
warez_men
01.08.2012, 15:37
это просто класс с параметрами. Или я что то не так понял в вашем вопросе?
Уровни можно было вынести во вне хмл, жсон, или захардкордить массивы?
Если этот класс нигде не используется, то компилятор не встраивает его в конечную флешку и из-за этого getDefinitionByName его и не находит.
Можно просто завести массив или... Я делаю так:
private static var __class:Object = {
"Label": gui.items.Label,
"Level1": Level1
}
public function createItem(name:String):IItem {
return new __class[name]();
}
warez_men
01.08.2012, 16:04
Понятно спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.