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

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

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

Регистрация: Nov 2009
Сообщений: 176
По умолчанию передача данных через интерфейсы

Добрый день!
Возник следующий вопрос. Нужно передать данные из основной swf в подгружаемую и обратно через интерфейс. В подгружаемую получается передать через интерфейс, а вот в основную только через dispatchEvent.

Как через интерфейс передать данные в основную swf с подгружаемой? И возможно ли это?

Основная swf:
Код AS3:
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);
		}
	}
}
подгружаемая:
Код AS3:
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);
		}
	}
}
интерфейсы:
Код AS3:
package
{
	public interface ITextTrace
	{
		function textTrace(str:String):void;
	}
}

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

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

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


 


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


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