Лично я бы избегал Синглтона, так как он регулярно применяется.Однако иметь единственный экземпляр этого объекта буфера имеет смысл.Так что я бы сделал в этом случае, чтобы ваш класс Main создал этот объект.Когда зритель загружен, передайте ему этот объект.Затем сделайте то же самое для загрузчика.Теперь оба ваших swfs имеют общий объект, который они могут использовать для общения.Затем вы можете вызывать функции и заставлять его отправлять события, если хотите (расширяя EventDispatcher или реализуя IEventDispatcher).Или вы можете просто зарегистрировать обратные вызовы, если хотите (должно быть немного быстрее, но не уверены, что это будет иметь большое значение).
Редактировать
Взглядна ваш другой вопрос я думаю, что ваша проблема была связана с получением правильного загрузчика и передачей данных в загруженный контент.Вот пример того, как вы могли бы реализовать то, что я упомянул выше.
PhotoLoader.swf:
package {
import flash.display.Sprite;
import flash.events.Event;
public class PhotoLoader extends Sprite {
private var _commonObject:CommonObject;
public function PhotoLoader() {
}
public function setCommonObject(commonObject:CommonObject):void {
trace("PhotoLoader::setCommonObject", commonObject);
_commonObject = commonObject;
_commonObject.addEventListener(Event.INIT,handleInit);
}
private function handleInit(e:Event):void {
trace("PhotoLoader::handleInit");
}
}
}
PhotoViewer.swf:
package {
import flash.display.Sprite;
import flash.events.Event;
public class PhotoViewer extends Sprite {
private var _commonObject:CommonObject;
public function PhotoViewer() {
}
public function setCommonObject(commonObject:CommonObject):void {
trace("PhotoLoader::setCommonObject", commonObject);
_commonObject = commonObject;
_commonObject.addEventListener(Event.INIT,handleInit);
}
private function handleInit(e:Event):void {
trace("PhotoViewer::handleInit");
}
}
}
Main.swf
package {
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
public class Main extends Sprite {
private var _photoLoader:PhotoLoader;
private var _photoViewer:PhotoViewer;
private var _commonObject:CommonObject;
private var _viewerLoader:Loader;
private var _loaderLoader:Loader;
private var _count:int = 0;
public function Main():void {
_commonObject = new CommonObject();
loadSwfs();
}
private function loadSwfs():void {
_viewerLoader = new Loader();
_viewerLoader.contentLoaderInfo.addEventListener(Event.INIT,handleInit);
_viewerLoader.load(new URLRequest("PhotoViewer.swf"));
_loaderLoader = new Loader();
_loaderLoader.contentLoaderInfo.addEventListener(Event.INIT,handleInit);
_loaderLoader.load(new URLRequest("PhotoLoader.swf"));
}
private function handleInit(e:Event):void {
trace("handleInit");
var loader:Loader = (e.target as LoaderInfo).loader;
switch(loader) {
case _viewerLoader:
_photoViewer = _viewerLoader.content as PhotoViewer;
_photoViewer.setCommonObject(_commonObject);
_count++;
break;
case _loaderLoader:
_photoLoader = _loaderLoader.content as PhotoLoader;
_photoLoader.setCommonObject(_commonObject);
_count++;
break;
}
if(_count == 2) {
_commonObject.init();
}
}
}
}
И общий объект, общий для 3 swf:
package {
import flash.events.Event;
import flash.events.EventDispatcher;
public class CommonObject extends EventDispatcher {
public function CommonObject() {
}
public function init():void {
dispatchEvent(new Event(Event.INIT));
}
}
}
В основном, когда вы загружаете и свои SWF-файлы для просмотра и загрузки, вы передаете экземпляр этого общего объекта.Затем вы регистрируетесь для прослушивания метода INIT: это скажет загрузчику и зрителю, что все настроено.Таким образом, в этот момент вы можете начать отправку сообщений от вашего зрителя или загрузчика другой стороне (вы можете реализовать это посредством диспетчеризации событий);в основном, создайте метод в общем объекте, чтобы сделать это за вас, или просто вызовите dispatchEvent для общего объекта напрямую.