Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему getDefinitionByName "не видит" классов из swc? (http://www.flasher.ru/forum/showthread.php?t=145754)

AlliAS 18.10.2010 21:36

Почему getDefinitionByName "не видит" классов из swc?
 
Здравствуйте. Мне нужно получать объект по имени класса из 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

Цитата:

Сообщение от vinch (Сообщение 943648)
Нужно этот класс где-то упомянуть в коде

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

Цитата:

или, если не ошибаюсь, можно поставить 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

Цитата:

Сообщение от vinch (Сообщение 943675)
Помогает. Стандартно подключаются только те классы, на которые есть отсылка в коде.

Только new

AlliAS 19.10.2010 02:00

Цитата:

Сообщение от dimarik (Сообщение 943665)
Браво! Просто включите имя класса где-нибудь в проекте. Прям в любом месте.

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

vinch 19.10.2010 02:02

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

Цитата:

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

ReferenceError: Error #1065: Переменная ClassX не определена:
Код AS3:

public function Main():void 
{
        getDefinitionByName("ClassX");
}

А так - работает:
Код AS3:

public function Main():void 
{
        ClassX;
        getDefinitionByName("ClassX");
}


dimarik 19.10.2010 03:07

Цитата:

Сообщение от Котяра (Сообщение 943676)
Только new

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

Котяра 19.10.2010 03:20

упустил я. просто импорт не работает, а писать
Код AS3:

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

Цитата:

Мне религия не позволяла
а я просто пишу обычно так
Код AS3:

private var _game:Game;

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

LOS2008 23.10.2010 00:19

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


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

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