Это правильный синтаксис для добавления слушателя к компоненту, указанному загрузчиком - PullRequest
0 голосов
/ 10 апреля 2011

Я использовал синтаксис, который нашел здесь AS3: добавить прослушиватель событий в загруженный SWF

    var theLoader:Loader = new Loader();
    theLoader.load(new URLRequest("mySWF.swf"));
    theLoader.addEventListener(CustomEvent.ON_CUSTOM_EVENT,OnCustomEvent);

MySWF загружается без проблем.

На самом деле не возвращаеткласс mySWF, поэтому мне интересно, действительно ли это правильный синтаксис.И на самом деле я ничего не получаю.

Я, конечно, отправляю пользовательское событие от mySWF.

Flash кажется настоящим кошмаром, чтобы справиться с пользовательскими событиями на практике по сравнению с другими платформами.

Ответы [ 3 ]

1 голос
/ 10 апреля 2011

Добавьте параметр в ваше пользовательское событие, чтобы включить ссылку на экземпляр класса, отправляющего событие. Пример:

DispatchEvent (новое CustomEvent (CustomEvent.TYPE, пузырьки, отменяемые, это));

1 голос
/ 10 апреля 2011

Похоже, вам просто нужно получить ссылку на контент, загруженный загрузчиком. Это работает так:

var movieClip:MovieClip;
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("mySwf.swf"));

function completeHandler(e:Event):void {
movieClip = MovieClip(loader.content); // this extracts the movieclip.
loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, completeHandler);
loader = null // prepares the loader for garbage collection.

process();
}

function process():void {
movieClip.addEventListener(MouseEvent.CLICK, clickHandler);
}

function clickHandler(e:MouseEvent):void {
trace("You just clicked your loaded .swf!");
}

Отсюда вы просто должны быть в состоянии прослушать ваше собственное событие. Я проверю позже, чтобы увидеть, если вам повезет, у меня нет времени, чтобы создать полный тестовый пример прямо сейчас.

Заметьте одно - вы видите, что я разыгрываю loader.content как MovieClip, просто потому, что это безопасный, динамический базовый класс для любого загруженного .swf. Поскольку MovieClip является динамическим, вы можете пытаться получить доступ к методам и свойствам этого класса без их явного определения.

Если вы решите, что вам требуется более сложный набор данных, у вас есть несколько вариантов. Вы можете создать интерфейс, который будет скомпилирован в оба приложения (родительский .swf и дочерний .swf), а затем использовать loader.content в качестве этого интерфейса. Или (и я просто размышляю сейчас, я никогда не пробовал это, но это ДОЛЖНО работать ...), вы можете дать ребенку .swf открытое свойство с именем "myClass", которое содержит ссылку на базовый класс этого .swf. .

Тогда вы сделаете то, что я делал выше, но в методе process () вы сделаете что-то вроде этого:

function process():void {
var class:Class = movieClip.myClass as Class;
var myTypedLoadedMovieClip:class = class(movieClip);
trace(myTypedLoadedMovieClip); // this SHOULD work...right?


}

Как я уже сказал, я проверю позже, чтобы увидеть, если вам повезет, и я постараюсь придумать несколько тестов для этого!

1 голос
/ 10 апреля 2011

ваше пользовательское событие не будет вызвано, потому что загрузчик поддерживает только несколько предопределенных событий. если вы думаете об этом, как загрузчик узнает, когда и почему он должен запустить ваше пользовательское событие? имеет смысл запускать только предопределенные события (например, Event.COMPLETE, ...). посмотрите здесь: события загрузчика .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...