PDA

Просмотр полной версии : Почему getDefinitionByName "не видит" классов из swc?


AlliAS
18.10.2010, 21:36
Здравствуйте. Мне нужно получать объект по имени класса из swc файла, как это сделать учитывая что getDefinitionByName возвращает ошибку о том что переменная не определена (new + тоже_самое_имя прекрасно работает)? Почему не получает класс по имени из swc?

BlooDHounD
18.10.2010, 21:44
это значит что класс не включён в конечный swf.

AlliAS
18.10.2010, 22:20
хм, при компиляции то он включаеться, тоесть если открыть swc тем же FlashDevolop'ом класс там есть (он графический)

vinch
18.10.2010, 23:46
Нужно этот класс где-то упомянуть в коде, или, если не ошибаюсь, можно поставить Always Compile или как-то так в FD для .swc файла.

dimarik
19.10.2010, 01:10
Нужно этот класс где-то упомянуть в коде
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.

или, если не ошибаюсь, можно поставить Always Compile или как-то так в FD для .swc файла.

А это уже отсебятина.

Котяра
19.10.2010, 01:51
ничего не отсебятина - подтверждаю - можно. Только это называется Included Library

vinch
19.10.2010, 01:52
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.
Помогает. Стандартно подключаются только те классы, на которые есть отсылка в коде.
А это уже отсебятина.
Ну я ж написал, "как-то так" :)
На самом деле - правый клик по файлу - Options - Included library (include completely). Присоединятся все классы и getDefinitionByName заработает независимо от наличия ссылки в коде.

Котяра
19.10.2010, 01:54
Помогает. Стандартно подключаются только те классы, на которые есть отсылка в коде.
Только new

AlliAS
19.10.2010, 02:00
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.


Спасибо, но это увы делу не поможет, эта функция мне как раз нужна для динамического получаения класса по его имени из xml, тоесть предполагаеться что таких классов очень много, и если придеться заранее все их объявить в коде то теряеться почти все удобство функции

vinch
19.10.2010, 02:02
AlliAS, Вы ведь в FD работаете? Тогда поставьте Options - Included library (include completely).

Только new
Да нет, по-моему.

ReferenceError: Error #1065: Переменная ClassX не определена:
public function Main():void
{
getDefinitionByName("ClassX");
}

А так - работает:
public function Main():void
{
ClassX;
getDefinitionByName("ClassX");
}

dimarik
19.10.2010, 03:07
Только new

Да ладно. Класс в байткоде и всё. Или я что-то упустил?

Котяра
19.10.2010, 03:20
упустил я. просто импорт не работает, а писать
public function Main():void
{
ClassX;
getDefinitionByName("ClassX");
}
Мне религия не позволяла :)
Ведь тут ошибка синтаксиса? Нет? Теперь буду знать.

zuxul
19.10.2010, 09:27
Создавайте не *.swc, а *.swf. Загружайте его через Loader#applicationDomain#getDefinition.
Правда при этом вся типизация пропадёт.

dimarik
19.10.2010, 10:18
Не вся. В рантайме останется.

CrazyFlasher
19.10.2010, 11:29
2zuxul: а кастить под интерфейс, не?

zuxul
19.10.2010, 11:35
2CrazyFlasher, да, забыл про это.
Мне всегда интересно было, как это сделать, т.к. я такое еще не делал.
Не подскажите, как нужно организовать все файлы - *.fla, *.as с интерфейсами, *.as с кодом.
При загрузке "доп.swf" в "главную.swf" будет ли код интерфейсов создаваться заново или же дублироваться?

gloomyBrain
19.10.2010, 13:07
Мне религия не позволяла

а я просто пишу обычно так

private var _game:Game;

и класс линкуется

LOS2008
23.10.2010, 00:19
OFF
спасибо за эту тему. Два часа убил, а всё решается галочкой "include completely".