Просмотр полной версии : Почему getDefinitionByName "не видит" классов из swc?
Здравствуйте. Мне нужно получать объект по имени класса из swc файла, как это сделать учитывая что getDefinitionByName возвращает ошибку о том что переменная не определена (new + тоже_самое_имя прекрасно работает)? Почему не получает класс по имени из swc?
BlooDHounD
18.10.2010, 21:44
это значит что класс не включён в конечный swf.
хм, при компиляции то он включаеться, тоесть если открыть swc тем же FlashDevolop'ом класс там есть (он графический)
Нужно этот класс где-то упомянуть в коде, или, если не ошибаюсь, можно поставить Always Compile или как-то так в FD для .swc файла.
Нужно этот класс где-то упомянуть в коде
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.
или, если не ошибаюсь, можно поставить Always Compile или как-то так в FD для .swc файла.
А это уже отсебятина.
ничего не отсебятина - подтверждаю - можно. Только это называется Included Library
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.
Помогает. Стандартно подключаются только те классы, на которые есть отсылка в коде.
А это уже отсебятина.
Ну я ж написал, "как-то так" :)
На самом деле - правый клик по файлу - Options - Included library (include completely). Присоединятся все классы и getDefinitionByName заработает независимо от наличия ссылки в коде.
Помогает. Стандартно подключаются только те классы, на которые есть отсылка в коде.
Только new
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.
Спасибо, но это увы делу не поможет, эта функция мне как раз нужна для динамического получаения класса по его имени из xml, тоесть предполагаеться что таких классов очень много, и если придеться заранее все их объявить в коде то теряеться почти все удобство функции
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");
}
Только new
Да ладно. Класс в байткоде и всё. Или я что-то упустил?
упустил я. просто импорт не работает, а писать
public function Main():void
{
ClassX;
getDefinitionByName("ClassX");
}
Мне религия не позволяла :)
Ведь тут ошибка синтаксиса? Нет? Теперь буду знать.
Создавайте не *.swc, а *.swf. Загружайте его через Loader#applicationDomain#getDefinition.
Правда при этом вся типизация пропадёт.
Не вся. В рантайме останется.
CrazyFlasher
19.10.2010, 11:29
2zuxul: а кастить под интерфейс, не?
2CrazyFlasher, да, забыл про это.
Мне всегда интересно было, как это сделать, т.к. я такое еще не делал.
Не подскажите, как нужно организовать все файлы - *.fla, *.as с интерфейсами, *.as с кодом.
При загрузке "доп.swf" в "главную.swf" будет ли код интерфейсов создаваться заново или же дублироваться?
gloomyBrain
19.10.2010, 13:07
Мне религия не позволяла
а я просто пишу обычно так
private var _game:Game;
и класс линкуется
OFF
спасибо за эту тему. Два часа убил, а всё решается галочкой "include completely".
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.