![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Добрый день, хочется разобраться кое в каком вопросе. Не буду много писать, сразу начну с примера.
Во Flash IDE хранится элемент с идентификатором Element, который реализует одноименный класс. В классе реализованы несколько функций, свойств, которые должны свободно вызываться из флекса (swf-файл называется library.swf и находится в папке assets). В самом флексе я пишу: [Embed(source="assets/library.swf#Element")] private var ElementClass:Class; private var element:MoveiClipLoaderAsset; protected override function createChildren():void { element = new ElementClass(); addChild(element); } Но если поменять первую строчку на А в самом library.swf поместить элемент Element на stage, то никаких ошибок не выдается и с этим элементом можно работать и использовать его функции. Бывают ситуации, когда использование элементов библиотеки крайне желательно по сравнению с созданием отдельных swf'ок для каждого элемента. |
|
|||||
|
Modus ponens
|
В первом случае линкуется весь SWF вообще не вдавайсь в подробности, что там внутри, просто взяли, скопировали байты и записали их по адресу нового символа.
Во втором случае линкер лезет в библиотеку SWF файла и ищет символ (символ - это не класс, это ресурс) и потом создает новый класс-наследник какого-нибудь из *Asset (BitmapAsset, SoundAsset и т.п.) и цепляет ему этот символ. Т.е. класс которой Флеш прилинковал к этому сивмолу остается за бортом.
__________________
Hell is the possibility of sanity |
|
|||||
|
Это понятно. А почему тогда, если поместить элемент Element в простой мувиклип-контейнер и во флексе указать на этот контейнер, то все равно выдается ошибка? Флекс же должен заменять класс символа на какой-нибудь из *Asset, а то, что внутри он не должен трогать.
|
|
|||||
|
Modus ponens
|
Чесно, таких подробностей я не знаю - хотите, можете покопаться в компиляторе и посмотреть что и как линкуется. Могу только предположить, что элементы помещенные на сцену во Флеше не являются объектами классов, а просто символами, просто когда мы к ним из кода обращаемся происходит что-то типа как в AS2 Object.registerClass() и этот символ "приводится" к классу. Это так же объяснило бы то обсоятельство, что для объектов помещенных на сцену в ИДЕ stage доступен сразу. Но это догадка, конкретной инфы по этому поводу мне не попадалось.
Если вам принципиально нужно получить класс, а не символ - используйте SWC.
__________________
Hell is the possibility of sanity |
|
|||||
|
SWC, думаю, вряд ли поможет. Дело в том, что в library.fla несколько классов-наследников(ElementA, ElementB ...) одного суперкласса (SuperElement), каждый из которых использует одну и туже графику, просто интерпретирует по-разному. Если создавать отдельный файл для каждого класса, то получится, что одна и та же графика будет в каждом из этих файлов, что в несколько раз увеличивает размер конечного файла
|
|
|||||
|
Modus ponens
|
Ну так чем плохо? Скомпилировали SWC и используйте сколько хотите классов, повторно одни и те же символы из одной и той же SWC не прилинкуются.
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 19:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|