Форум 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=139330)

1uka 28.04.2010 14:22

обращение к имени класса
 
всем привет !, можно ли обратиться к имени класса не напрямую ?, тоесть есть класс myClass0, нужно создавать класс в зависимости от указанных условий,можноли обратиться к имени класса на подобии обращения к children ['myClass'+0], или как это вообще делается?

ChP 28.04.2010 15:20

Вообще должен работать такой код:
Код AS3:

var TestClass:Object = getDefinitionByName("MyClass") as Object;
var testObj = new TestClass();

Но он почему-то не работает с пользовательскими классами.
Но что еще более странно, то вот этот код работает:
Код AS3:

trace(getQualifiedClassName(MyClass))
var TestClass:Object = getDefinitionByName("MyClass") as Object;
var testObj = new TestClass();

К сожалению в твоей ситуации это не прокатит - в параметр getQualifiedClassName(MyClass) нужно передавать сам класс. Видимо в этот момент компилятор узнает о существовании класса. Как вариант можно для всех твоих классов вызвать getQualifiedClassName(MyClass), после чего все будет работать

iflamberg 28.04.2010 15:36

2ChP:
первый кусок кода не работает, потому что, если класс ни разу нигде не упомянут в коде, то он просто не вкомпиливается в swf даже не смотря на import'ы. Что с этим делать я, правда, так и не выяснил.

incvizitor 28.04.2010 15:41

ChP, он работает с пользовательскими и любыми другими классами, просто надо указывать полностью путь к классу например:

Код AS3:

var TestClass:Class = getDefinitionByName("code.MyClass") as Class;
var testObj = new TestClass();

В случае если "MyClass" находится в пакете "code". Класс котырый вызывается должен быть хотя бы раз прописан в коде (иначе он не будет скомпилирован). Напишешь ты его в trace или ещё где - не важно.

1uka, тебе надо делать так:

Код AS3:

 
MyClass0;
MyClass1;
MyClass2;
 
for(var i:uint=0;i<3;i++){
var cl:Class=getDefinitionByName("MyClass"+i) as Class;
var obj:cl=new cl();
}

Добавлено через 3 минуты
iflamberg, с этим ничего не сделаешь, это физически не возможно. Да и зачем? Я думаю на написание класса уходит значительно больше времени, чем на одно его упоминание. Поэтому беда не большая :)

iflamberg 28.04.2010 15:47

Ну я бы хотел, например, чтобы при указании flex sdk подключаемых swc-библиотек можно было указать, что оттуда нужно вкомпилировать ВСЕ имеющиеся символы.


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

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