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

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

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

Регистрация: Jul 2009
Сообщений: 95
По умолчанию Отсутствие инициализации inspectable props на главной сцене

Добрый день коллеги! На днях обнаружился весьма любопытный момент в работе 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.
Вот объявление его отображения:
Код AS3:
[Inspectable(type="String", defaultValue="")]
		public function get text():String{return textField.text;}
		public function set text(txt:String):void{
			textField.text = txt;
		}
Все библиотеки грузятся в одном домене:
Код AS3:
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
			loder.load(new URLRequest(path), context);
В идеале, когда запускаем главную флешку Main.swf, то видим в ней 2 надписи:
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.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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