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

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

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

Регистрация: Jan 2007
Сообщений: 76
По умолчанию flex-проект во flash-проекте

В общем требуется вот что: есть проект на флексе, требуется сделать так, чтобы другой проект, но уже на cs4 вгружал его swf в себя. Либо как внешний свф, либо как компонент из библиотеки (если такое возможно). При этом нужно чтобы после загрузки родительский swf мог передавать загруженному информацию в в виде объектов/переменных, а так же мог ловить события, которые исходят от загруженного flex swf.

Вопрос - как это в принципе делается? Вгрузить флэшку то по идее не проблема, интересует как реализовать передачу переменных и отлов событий.

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

Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
LocalConnection, LoaderContext, ApplicationDomain.
__________________
#flasher@irc.trg.ru:6667

Старый 12.05.2009, 19:47
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 3  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
Спасибо конечно, но можно ли немного подробнее? И зачем здесь LocalConnection?

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если вы загрузите флексовую (я так понимаю фреймворковскую) SWF в нефреймворковский проект - у вас есть только один вариант это сделать - грузить ее в currentDomain - это значит, что все, что в ней есть будет так же доступно и загрузившей флешке. Т.е. можно вызывать методы, передавать события друг другу и т.д.

Единственное, это чревато тем, что если, например, имена классов в загружающей флешке случайно совпадут с фреймворковскими, то будут использованы первые, иногда, изза этого флексовая SWF просто не будет работать... да и вообще они могут не работать после загрузки изза многих других причин
__________________
Hell is the possibility of sanity

Старый 12.05.2009, 21:15
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 5  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
Хорошо, фреймворковская swf загружается и работает нормально, конфликотов с классами нет, но и вызвать ее методы мне не удается.

Вот такой метод находится в mx:Application, в фреймворковской swf:

Код AS3:
<mx:Script>
		<![CDATA[
			import mx.controls.Alert;
 
			public function traceMe(val:String):void {
				Alert.show(val, val)
			}
		]]>
</mx:Script>

Вот такой код в загружающей флэшке:

Код AS3:
var a:Loader = new GCSafeLoader()
a.contentLoaderInfo.addEventListener(Event.COMPLETE, onCompleteHandler);
addChild(a)
 
function onCompleteHandler(e:Event):void {
	a.content.traceMe('test')
}
 
a.load(new URLRequest("../Flex/Uploader/bin-debug/Uploader.swf"))
попытка вызвать traceMe фыдает такую ошибку:
ReferenceError: Error #1069: Property traceMe not found on _Uploader_mx_managers_SystemManager and there is no default value.
at MethodInfo-250()

Не подскажите как действовать?

UPD

отловить всплывающие события из загруженной флэшки тоже не получается.


Последний раз редактировалось Онтожка; 12.05.2009 в 21:25.
Старый 12.05.2009, 22:54
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

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

Старый 12.05.2009, 23:16
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 7  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
И понятно и с другой стороны не понятно
Функция объявлена у Application, да, но как до него добраться из моего объекта Loader?
Какой именно стейдж нужно слушать? Пробовал стейдж лоадера - ничего.

UPD

разобрался с первым вопросом, по событию COMPLETE лоадера a.content.application возвращает null, но с задержкой в одну секунду возвращает объект Application с видимой функцией traceMe, я так понимаю это происходит из-за того что сразу при добавлении на сцену подгруженный свф не успевает инициализировать все свои внутренности, так сказать.

Тут логично было бы слушать событие, которое будет испускаться при creationComplete, но вот с отловом событий я пока так и не разобрался. Не могли бы вы описать в деталях где конкретно их нужно слушать?

UPD 2

разобрался и с событиями. Заработало когда при событии creationComplete я подписал application на событие ADDED_TO_STAGE, а уже из обработчика этого события запустил новое, которое успешно отлавливается на лоадере.


Последний раз редактировалось Онтожка; 12.05.2009 в 23:50.
Старый 12.05.2009, 23:50
2morrowMan вне форума Посмотреть профиль Отправить личное сообщение для 2morrowMan Найти все сообщения от 2morrowMan
  № 8  
Ответить с цитированием
2morrowMan
 
Аватар для 2morrowMan

Регистрация: Aug 2007
Сообщений: 467
Цитата:
Сообщение от Онтожка Посмотреть сообщение
разобрался с первым вопросом, по событию COMPLETE лоадера a.content.application возвращает null, но с задержкой в одну секунду возвращает объект Application с видимой функцией traceMe, я так понимаю это происходит из-за того что сразу при добавлении на сцену подгруженный свф не успевает инициализировать все свои внутренности, так сказать.
Поробуйте использовать Event.INIT вместо Event.COMPLETE.
__________________
Лучше быть умным и иногда делать глупости, чем глупым и постоянно умничать!

Старый 12.05.2009, 23:59
Онтожка вне форума Посмотреть профиль Отправить личное сообщение для Онтожка Найти все сообщения от Онтожка
  № 9  
Ответить с цитированием
Онтожка

Регистрация: Jan 2007
Сообщений: 76
нет, при событии Event.INIT application еще не виден.

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

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

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

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

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


 


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


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