Показать сообщение отдельно
Старый 13.10.2006, 18:30
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
У нас есть интерфейс IGameClass:
Код:
interface IGameClass {
	public function addEventListener():Void;
	public function removeEventListener():Void;
}
Есть класс LinkExchanger, хранящий ссылку на интерфейс GameClass:
Код:
import IGameClass;
class LinkExchanger {
	public static var game:IGameClass;
}
Есть класс GameClass, реализующий IGameClass:
Код:
import LinkExchanger;
import IGameClass;
import mx.events.EventDispatcher;
class GameClass implements IGameClass {
	
	private var dispatchEvent:Function;
	
	public function GameClass() {
		EventDispatcher.initialize(this);
		LinkExchanger.game = this;
		Mouse.addListener(this);
	}
	
	public function addEventListener():Void {
		// EventDispatcher native code
	}
	
	public function removeEventListener():Void {
		// EventDispatcher native code
	}
	
	private function toString():String {
		return 'GameClass';
	}
	
	private function onMouseDown():Void {
		this.dispatchEvent({type:'onGameEvent'});
	}

}
В load.swf:
Код:
import GameClass;
new GameClass();
В loader.swf:
Код:
import LinkExchanger;
import IGameClass;
clip = this.createEmptyMovieClip('clip_mc',0);
mcl = new MovieClipLoader();
mcl.addListener(this);
onLoadInit = function() {
	trace(LinkExchanger.game); // GameClass
	LinkExchanger.game.addEventListener('onGameEvent',this);
}
onGameEvent = function(e:Object) {
	trace('Game event called from external swf');
}
mcl.loadClip('load.swf',clip);
Нужно помнить, что в интерфейсах могут быть только методы, никаких свойств. Т.е. обращаться к свойствам GameClass нельзя, но можно вызывать его методы. А лучше подписаться на события, что и требовалось.

На выходе в loader.swf не должно быть класса GameClass.