Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.10.2009, 19:35
Peregrin вне форума Посмотреть профиль Отправить личное сообщение для Peregrin Найти все сообщения от Peregrin
  № 1  
Ответить с цитированием
Peregrin
 
Аватар для Peregrin

Регистрация: Nov 2006
Адрес: Hamburg
Сообщений: 195
Отправить сообщение для Peregrin с помощью ICQ
По умолчанию Embed(soure) и Embed(soure, symbol). Почему такая разница?

Добрый день, хочется разобраться кое в каком вопросе. Не буду много писать, сразу начну с примера.
Во Flash IDE хранится элемент с идентификатором Element, который реализует одноименный класс. В классе реализованы несколько функций, свойств, которые должны свободно вызываться из флекса (swf-файл называется library.swf и находится в папке assets).

В самом флексе я пишу:
Код AS3:
[Embed(source="assets/library.swf#Element")]
private var ElementClass:Class;
 
private var element:MoveiClipLoaderAsset;
 
protected override function createChildren():void
{
	element = new ElementClass();
	addChild(element);
}
Тут выбрасывается ошибка. То есть такой метод не работает (флекс не имеет доступ к описанию класса Element.as)
Но если поменять первую строчку на
Код AS3:
[Embed(source="assets/library.swf")]
А в самом library.swf поместить элемент Element на stage, то никаких ошибок не выдается и с этим элементом можно работать и использовать его функции.
Бывают ситуации, когда использование элементов библиотеки крайне желательно по сравнению с созданием отдельных swf'ок для каждого элемента.

Старый 08.10.2009, 19:54
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
В первом случае линкуется весь SWF вообще не вдавайсь в подробности, что там внутри, просто взяли, скопировали байты и записали их по адресу нового символа.
Во втором случае линкер лезет в библиотеку SWF файла и ищет символ (символ - это не класс, это ресурс) и потом создает новый класс-наследник какого-нибудь из *Asset (BitmapAsset, SoundAsset и т.п.) и цепляет ему этот символ. Т.е. класс которой Флеш прилинковал к этому сивмолу остается за бортом.
__________________
Hell is the possibility of sanity

Старый 08.10.2009, 22:34
Peregrin вне форума Посмотреть профиль Отправить личное сообщение для Peregrin Найти все сообщения от Peregrin
  № 3  
Ответить с цитированием
Peregrin
 
Аватар для Peregrin

Регистрация: Nov 2006
Адрес: Hamburg
Сообщений: 195
Отправить сообщение для Peregrin с помощью ICQ
Это понятно. А почему тогда, если поместить элемент Element в простой мувиклип-контейнер и во флексе указать на этот контейнер, то все равно выдается ошибка? Флекс же должен заменять класс символа на какой-нибудь из *Asset, а то, что внутри он не должен трогать.

Старый 08.10.2009, 22:57
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Чесно, таких подробностей я не знаю - хотите, можете покопаться в компиляторе и посмотреть что и как линкуется. Могу только предположить, что элементы помещенные на сцену во Флеше не являются объектами классов, а просто символами, просто когда мы к ним из кода обращаемся происходит что-то типа как в AS2 Object.registerClass() и этот символ "приводится" к классу. Это так же объяснило бы то обсоятельство, что для объектов помещенных на сцену в ИДЕ stage доступен сразу. Но это догадка, конкретной инфы по этому поводу мне не попадалось.
Если вам принципиально нужно получить класс, а не символ - используйте SWC.
__________________
Hell is the possibility of sanity

Старый 09.10.2009, 12:28
Peregrin вне форума Посмотреть профиль Отправить личное сообщение для Peregrin Найти все сообщения от Peregrin
  № 5  
Ответить с цитированием
Peregrin
 
Аватар для Peregrin

Регистрация: Nov 2006
Адрес: Hamburg
Сообщений: 195
Отправить сообщение для Peregrin с помощью ICQ
SWC, думаю, вряд ли поможет. Дело в том, что в library.fla несколько классов-наследников(ElementA, ElementB ...) одного суперкласса (SuperElement), каждый из которых использует одну и туже графику, просто интерпретирует по-разному. Если создавать отдельный файл для каждого класса, то получится, что одна и та же графика будет в каждом из этих файлов, что в несколько раз увеличивает размер конечного файла

Старый 09.10.2009, 21:51
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну так чем плохо? Скомпилировали SWC и используйте сколько хотите классов, повторно одни и те же символы из одной и той же SWC не прилинкуются.
__________________
Hell is the possibility of sanity

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:25.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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