![]() |
|
||||||||||
|
|||||
|
Регистрация: Jan 2007
Сообщений: 76
|
В общем требуется вот что: есть проект на флексе, требуется сделать так, чтобы другой проект, но уже на cs4 вгружал его swf в себя. Либо как внешний свф, либо как компонент из библиотеки (если такое возможно). При этом нужно чтобы после загрузки родительский swf мог передавать загруженному информацию в в виде объектов/переменных, а так же мог ловить события, которые исходят от загруженного flex swf.
Вопрос - как это в принципе делается? Вгрузить флэшку то по идее не проблема, интересует как реализовать передачу переменных и отлов событий. |
|
|||||
|
Регистрация: Nov 2007
Адрес: Moscow
Сообщений: 566
|
LocalConnection, LoaderContext, ApplicationDomain.
__________________
#flasher@irc.trg.ru:6667 |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 76
|
Спасибо конечно, но можно ли немного подробнее? И зачем здесь LocalConnection?
|
|
|||||
|
Modus ponens
|
Если вы загрузите флексовую (я так понимаю фреймворковскую) SWF в нефреймворковский проект - у вас есть только один вариант это сделать - грузить ее в currentDomain - это значит, что все, что в ней есть будет так же доступно и загрузившей флешке. Т.е. можно вызывать методы, передавать события друг другу и т.д.
Единственное, это чревато тем, что если, например, имена классов в загружающей флешке случайно совпадут с фреймворковскими, то будут использованы первые, иногда, изза этого флексовая SWF просто не будет работать... да и вообще они могут не работать после загрузки изза многих других причин ![]()
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 76
|
Хорошо, фреймворковская swf загружается и работает нормально, конфликотов с классами нет, но и вызвать ее методы мне не удается.
Вот такой метод находится в mx:Application, в фреймворковской swf: <mx:Script> <![CDATA[ import mx.controls.Alert; public function traceMe(val:String):void { Alert.show(val, val) } ]]> </mx:Script> Вот такой код в загружающей флэшке: 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")) 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. |
|
|||||
|
Modus ponens
|
Так а вы же функцию у Application наверное объявили, а пытаетесь ее вызвать у SystemManager.
Всплывающие событя отловить вам скорее всего не удасться по нескольким причинам: большинство из них перехватываются спрайтом-фоном на capture фазе, но даже те, которые не перехватываются вам нужно будет слушать у стейджа.
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: 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. |
|
|||||
|
Регистрация: Aug 2007
Сообщений: 467
|
Цитата:
__________________
Лучше быть умным и иногда делать глупости, чем глупым и постоянно умничать! |
|
|||||
|
Регистрация: Jan 2007
Сообщений: 76
|
нет, при событии Event.INIT application еще не виден.
|
|
|||||
|
Modus ponens
|
Флексовая SWF состоит из двух кадров, инициализация аппликации происходит на втором, но еще и изза того, что процесс отрисовки происходит очень долго и мучительно... это может занять еще несколько кадров
я думаю, что самым простым решением было бы в applicationComplete вызвать у SystemManager dispatchEvent("загрузились наконец") и на него подписаться из загружающей флешки, или подисывайтесь на ENTER_FRAME у SystemManager и ждите, когда Application инициализируется...
__________________
Hell is the possibility of sanity |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|