Показать сообщение отдельно
Старый 13.04.2011, 19:12
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Сори, тупанул.
Однако, всяко лучше делать это через интерфейс:
Код AS3:
package  {
 
	import flash.events.IEventDispatcher;
 
	/**
	 * Интерфейс для основного класса загружаемой флешки
	 * 
	 * @author gloomyBrain
	 */
	public interface IContent extends IEventDispatcher {
 
		function biteMe():String;
 
	}
 
}
Главный класс загружаемой флешки
Код AS3:
public class Main extends Sprite implements IContent {
 
	public function Main() {
		...
	}
}
Если же нам нужно о чем-то попросить главный модуль из загружаемого, мы можем сделать это через sharedEvents:
Код AS3:
// в главном классе загружаемой флешки
super.loaderInfo.sharedEvents.dispatchEvent();
И загружающая флешка:
Код AS3:
package {
 
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.errors.IllegalOperationError;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
 
	/**
	 * 
	 * 
	 * @author gloomyBrain
	 */
	public class Main extends Sprite {
 
		public function Main() {
 
			if (super.stage) this.init();
			else super.addEventListener(Event.ADDED_TO_STAGE, init);
 
		}
 
		private function init(event:Event = null):void {
 
			super.removeEventListener(Event.ADDED_TO_STAGE, init);
			super.stage.scaleMode = StageScaleMode.NO_SCALE;
			super.stage.align = StageAlign.TOP_LEFT;
 
			// entry point
 
			var loader:Loader = new Loader();
			var request:URLRequest = new URLRequest("...");
			var context:LoaderContext = new LoaderContext();
 
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader.load(request, context);
 
		}
 
		private function onComplete(event:Event):void {
 
			var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo;
			loaderInfo.removeEventListener(event.type, arguments.callee);
 
			var content:IContent = loaderInfo.content as IContent;
			if (!content) throw new IllegalOperationError("Загруженный контент не реализует IContent!");
 
			// вот тут можем управлять загруженной флешкой из основной
			content.biteMe();
			// или подписаться на события
			content.loaderInfo.haredEvents.addEventListener(someEvent, someListener);
 
		}
 
		private function someListener(event:someEvent):void {
 
			(event.currentTarget as IContent).biteMe();
 
		}
 
	}
 
}
Интерфейс должен быть вкомпилен в обе флешки
__________________
...вселенская грусть