PDA

Просмотр полной версии : Псевдодинамически генерировать код - можно ли?


Toothbrusher
24.03.2013, 01:07
Если у меня в библиотеке набор картинок с названиями img0 ... img9, имеющие связку с as, естественно.
И если я хочу создать новые объекты картинок и поместить их на поле, то я должна писать что-то типа
addChild(new img0());
addChild(new img1());
addChild(new img2());
....

Можно ли номер вынести в переменную и получить что-то наподобие такого:

for (var i:int=0; i<10; i++){
addChild(new img<i>());
}
Как к img прилепить номер, чтобы получилось название класса, а не просто строка, и уже тем более не ошибка компиляции.

gagaga
24.03.2013, 01:13
for (var i:int=0; i<10; i++){
addChild(new this["img" + i]());
}

КорДум
24.03.2013, 01:33
for (var i:int=0; i<10; i++){
addChild(new (getDefinitionByName("img" + i) as Class)() as DisplayObject);
}

Toothbrusher
24.03.2013, 01:36
Что-то не хочет работать-то. Вот у меня есть такой бардак:
new av(new ["av"+0]())
где av - это класс кнопки, кот. принимает в себя bitmapdat'у. BitmapData лежит в библиотеке
29307
Этот вариант дает Error: Попытка реализации в объекте, который не является конструктором. WTF?
Если же с this
new av(new this ["av"+0]()) то также не работает.
Error:Не удалось найти свойство av0 в IdentificationPlayer; отсутствует значение по умолчанию.
Но я и не собираюсь создавать в классе такие свойства, они мне не нужны.

samana
24.03.2013, 12:57
Для картинок немного по другому:
var BmdClass:Class=getDefinitionByName("av"+i) as Class;
var bmd:BitmapData=new BmdClass(0,0);
var bm:Bitmap=new Bitmap(bmd);
addChild(bm)