Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Создание экземпляра класса по строке с именем (http://www.flasher.ru/forum/showthread.php?t=181108)

Aloran 15.06.2012 17:48

Создание экземпляра класса по строке с именем
 
Есть набор классов, которые расширяют один интерфейс. Есть метод который создает экземпляр одного из классов, в зависимости от строки содержащей имя. Как это реализовать?

Код AS3:

public function createItem(name:String):IItem // name = "Label"        gui.items.Label.as
{
    return new (name as Class)(); //естественно не пашет
}

возможно ли?

Hauts 15.06.2012 17:56

getDefinitionByName мб?

Код AS3:

public function createItem(name:String):IItem
{
    return new (getDefinitionByName( name ) as Class)();
}


Aloran 15.06.2012 19:59

Блин. Точно. Что то я заработался))) Спасибо!

warez_men 01.08.2012 14:53

А пользовательский классами не получается :(

Код AS1/AS2:

        var LavelName:String = "Level" + _levelNumber;
                        //"src.Levels::Level
                        var linkClassName:Class = getDefinitionByName(LavelName) as Class;

ругается
[Fault] exception, information=ReferenceError: Error #1065: Переменная Level1 не определена.

Если выше напишу
Код AS1/AS2:

trace("getQualifiedClassName="+getQualifiedClassName(Level1))

То работает но при таком раскладе пользы от этой функций очень мало помогите решить эту проблему.

GBee 01.08.2012 15:20

Цитата:

То работает но при таком раскладе пользы от этой функций очень мало помогите решить эту проблему
Код AS3:

var tmp1:Level1;
var tmp2:Level2;
var tmp3:Level3;


warez_men 01.08.2012 15:23

GBee,Думул об этом но у меня около 100 уровней и каждый так прописывать не красиво...

zuxul 01.08.2012 15:29

Level1 вкомпиливается в конечную флешку?

warez_men 01.08.2012 15:37

это просто класс с параметрами. Или я что то не так понял в вашем вопросе?

GBee 01.08.2012 15:47

Уровни можно было вынести во вне хмл, жсон, или захардкордить массивы?

zuxul 01.08.2012 15:52

Если этот класс нигде не используется, то компилятор не встраивает его в конечную флешку и из-за этого getDefinitionByName его и не находит.
Можно просто завести массив или... Я делаю так:
Код AS3:

private static var __class:Object = {
  "Label": gui.items.Label,
  "Level1": Level1
}
public function createItem(name:String):IItem {
    return new __class[name]();
}



Часовой пояс GMT +4, время: 03:27.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.