![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Jul 2009
Сообщений: 95
|
Добрый день коллеги! На днях обнаружился весьма любопытный момент в работе FlashPlayer версии 10.
В связи с этим решил создать тестовый упрощенный проектик, отражающий суть проблемы. Имеется 5 swf: Main.swf - загружает в себя ClassLibrary.swf, GUI1.swf и GUI2.swf ClassLibrary.swf - библиотека с классами, загружается в main.swf первой GUI1.swf - SWF, содержащая в себе компонент, текст которого инициализируется надписью "GUI1" GUI2.swf - SWF, содержащая в себе компонент, текст которого инициализируется надписью "GUI2" Component.swf - содержит в себе компонент, который импортируется в GUI1.swf и GUI2.swf. По умолчанию его текст устанавливается в значение TEXT. Вот объявление его отображения: [Inspectable(type="String", defaultValue="")] public function get text():String{return textField.text;} public function set text(txt:String):void{ textField.text = txt; } var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); loder.load(new URLRequest(path), context); GUI1 GUI2. Но в результате получаем GUI1 и TEXT! Gui1.swf и GUI2. swf имеют 2 класса с АБСОЛЮТНО одинаковым кодом! Их отличие лишь в сцене: в первой swf на сцене компоненту задано значение "GUI1", во второй - "GUI2". Но есть одно "НО". Поскольку проект может быть большим и с огромным количеством swf, флешка ClassLoader.swf импортирует в себя абсолютно все классы, которые есть во всех swf. Дело в том, что несколько swf могут импортировать какой-нибудь общий класс, при изменении которого придется компильнуть ВСЕ swf, которые используют этот класс, что весьма накладно, да и не всегда можно понять, в каких swf конкретный класс используется. А вот если компильнуть только одну swf, то получится, что в одной swf бинарный код актуальный, а в другой - нет и в таком случае, flashPlayer приминяет код на весь проект только из ПЕРВОЙ загруженной swf, что приводит вообще к непредсказуемым результатам. Поэтому и было принято решение компилировать весь код в одну swf - ClassLoader.swf и загружать её в main.swf что бы, если придется менять что-то в одном общем классе, используемом в большом количестве swf-ок, компилировать только одну swf. ТО, что в результате этой схемы мы видим GUI1 и TEXT, результат того, что класс GUI2Class импортирован в ClassLibrary, а GUI1Class - нет. По факту, у флешки GUI2.swf на главной сцене не вызывается сеттер у компонента. Прошу прощения за бородатось сего вопроса, поэтому прикрепляю ещё и архив с проектом. TEST - loader.zip Вопрос: как сделать так, что бы documentClass's компилировались в ClassLibrary, но при этом в соотвестующих им флешках у всех компонентов вызывался их сеттер? Последний раз редактировалось tofflife; 03.12.2012 в 16:58. |
![]() |
Часовой пояс GMT +4, время: 21:52. |
|
|
« Предыдущая тема | Следующая тема » |
|
|