|
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
передача данных через интерфейсы
Добрый день!
Возник следующий вопрос. Нужно передать данные из основной swf в подгружаемую и обратно через интерфейс. В подгружаемую получается передать через интерфейс, а вот в основную только через dispatchEvent. Как через интерфейс передать данные в основную swf с подгружаемой? И возможно ли это? Основная swf: package { import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.system.LoaderContext; import flash.system.Security; import flash.system.SecurityDomain; public class DataExchange extends Sprite implements ITextTrace { private var loader:Loader; private var loader2:Loader; private var mc:MovieClip; private var mc2:MovieClip; public var context:LoaderContext = new LoaderContext(); public function DataExchange() { loadSWF(); } private function loadSWF():void { var request:URLRequest = new URLRequest("res/field.swf"); loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadCompleate); loader.load(request); } private function onLoadCompleate(event:Event):void { var Field:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('field') as Class; mc = new Field(); mc.addEventListener(MouseEvent.CLICK, onClick); addChild(mc); } private function onClick(event:MouseEvent):void { if(Security.sandboxType == Security.REMOTE){ context.securityDomain = SecurityDomain.currentDomain } var request:URLRequest = new URLRequest("res/LoaderData.swf"); loader2 = new Loader(); loader2.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadCompleate2); loader2.load(request); } private function onLoadCompleate2(event:Event):void { addChild(loader2); loader2.content.addEventListener("CLOSE", onExternalClick); //передаём из основной флешки в подгружаемую (loader2.content as ITextTrace).textTrace("from"); } protected function onExternalClick(event:Event):void { textTrace("for"); } public function textTrace(str:String):void { trace(str); } } } package { import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.system.LoaderContext; import flash.system.Security; import flash.system.SecurityDomain; public class LoaderData extends Sprite implements ITextTrace { [Embed('res/field2.swf', mimeType='application/octet-stream')] private var Field2:Class; private var loader:Loader; private var mc:MovieClip; public var context:LoaderContext = new LoaderContext(); public function LoaderData() { Security.allowDomain("*"); context.securityDomain = SecurityDomain.currentDomain loadSWF(); } private function loadSWF():void { var swfClassField2:Class = Field2; var loaderField2:Loader = new Loader(); loaderField2.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInitRoom); loaderField2.loadBytes(new swfClassField2); } private function onLoaderInitRoom(event:Event):void { var field2LI:LoaderInfo = LoaderInfo(event.currentTarget); field2LI.removeEventListener(Event.INIT, onLoaderInitRoom); var Field:Class = field2LI.applicationDomain.getDefinition('field2') as Class; mc = new Field(); addChild(mc); mc.addEventListener(MouseEvent.CLICK, onClick); } private function onClick(event:MouseEvent):void { removeChild(mc); //передаём из подгружаемой в основную dispatchEvent(new Event("CLOSE")); //так ничего не передаёться ITextTrace(this).textTrace("for"); } public function textTrace(str:String):void { trace(str); } } } |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Интересно, что Вы хотели сказать этой конструкцией
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
как то хотел передать через интерфейс в основную swf.
в этом и вопрос. Как? Последний раз редактировалось Wadimir; 26.01.2013 в 20:39. |
|
|||||
.
|
Через интерфейс, в его понимании как ООП инструмента, вы ничего не передадите. Другое дело электроника. Там все передается через интерфейсы.
Добавлено через 4 минуты Я вам больше скажу. Когда swf загрузилась в виртуальную машину, она перестала быть swf. Рассуждения о том, чтобы передать данные из одной swf в другую считаю дремучим невежеством. |
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
Цитата:
и где были ваши умозаключения, dimarik, когда создавалась http://www.flasher.ru/forum/showthre...E0%ED%ED%FB%E5 эта тема и подобные? |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А Вы не пробовали для начала потрейсить то, что написали?
Например, trace(this) Вас уже удивит, насколько я смог понять.. trace(ITextTrace(this)) должен удивить не меньше. Фактически, Вы написали что-то вроде DisplayObjectContainer(this).addChild(mc); вместо addChild(mc); как Вы пишете выше, не боясь что this окажется.. вовсе не this. Короче я не понимаю ни логики ни вопроса. Ни самой фразы "передать через интерфейс", ни тем более самого кода (что и куда там передается? где там хотя бы упоминается "основная swf"? Вы пытаетесь вызвать в одном методе экземпляра другой, его же собственный, публичный метод, перед этим зачем-то проведя преобразование его же класса в интерфейс, как будто у класса без этого преобразования не будет нужного метода). Если Вы хотите вызвать метод "основной swf", то для начала надо наверное получить на нее ссылку, затем осуществить кастинг (... as ...) или проверку (if (... is ...)), является ли класс "основной swf" имплементатором интерфейса ITextTrace, и если да, то вызвать предусмотренный интерфейсом метод.
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
Цитата:
И почему вы вцепились к этой строчке, я и сам знаю что это не правильно. точно, что то я затупил. Спасибо |
|
|||||
.
|
Цитата:
И не вам я эти умозаключения оставил, а интернетам. |
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Цитата:
this.textTrace("for"); "в консоле будет for", textTrace("for"); "в консоле будет for", и даже trace("for"); "в консоле будет for". Цитата:
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Nov 2009
Сообщений: 176
|
Цитата:
? |
Часовой пояс GMT +4, время: 15:06. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|