PDA

Просмотр полной версии : Dispatch события без расширения EventDispatcher


kotbuterbrod
06.01.2011, 05:20
Сабж.

tsarapkabel
06.01.2011, 05:33
Может?
Если вы хотите сделать получателем события экземпляр класса, который уже расширяет другой класс, используйте композиционный подход...: непосредственно реализуйте интерфейс IEventDispatcher и используйте методы класса EventDispatcher не через наследование, а через композицию.

kotbuterbrod
06.01.2011, 05:34
Я читал Мука...

TanaTiX
06.01.2011, 05:39
Каким образом вы собираетесь отсылать сообщения, не имея для этого инструментов? Вы же не можете отображать на сцене булевую переменную, она не является DisplayObject.Так и тут, чтоб иметь возможность отсылать сообщения нужна реализаци IEventDispatcher

kotbuterbrod
06.01.2011, 05:48
Код:

В классе Main

public static var evt: EventDispatcher = new EventDispatcher();

При обработке события в MainClass

Делаю диспатч.

evt.dispatchEvent(new Event('test event');

В классе Second.

Main.evt.addEventListener('test event', onTestClicked, true,0,true);

Ну дальше идет соответственно функция onTestClicked, в которой делается трейс.

Добавлено через 3 минуты
Так вот трейс, не проходит....

TanaTiX
06.01.2011, 05:58
И не должен.
У вас Main статический класс? Надеюсь что и не будет.
Не нужно диспатчить в событие, диспатчите в тот объект, который может обработать сообщение
Ваш мэин:
import flash.event.Event;
...
var snd:MySound=new MySound();
snd.dispatchEvent(new Event("MyEvent"));
Ваш саунд:
import flash.event.Event;
...
addEventListener("MyEvent", onEvent, false, 0, true);
...
private function onEvent(e:Event):void{
trace("handler my event");
}

kotbuterbrod
06.01.2011, 06:08
О наиумнейший TanaTiX, преклоняюсь перед перед твоим AS3 могуществом, и прошу адрес для отсылки пива. СПАСИБО ОГРОМНОЕ !!!

f.g.programmer
06.01.2011, 12:26
Main.evt.addEventListener('test event', onTestClicked, true,0,true);

первый параметр true говорит о том, что мы хотим отловить событие на фазе перехвата, т.е. либо событие должно быть всплывающим и ловить его мы должны в родительском отображаемом объекте, либо (в данном случае подходит только этот вариант) добавлять обработчик с useCapture=false

Main.evt.addEventListener('test event', onTestClicked, false, 0, true);

dimarik
06.01.2011, 13:01
kotbuterbrod, Вы читали Мука по диагонали. Перечитайте о событийной модели вдумчиво.

Psycho Tiger
06.01.2011, 17:12
Я один не понимаю причем здесь статикики и почему реализация IEventDispatcher не подходит?

mayakwd
06.01.2011, 22:42
Я один не понимаю причем здесь статикики и почему реализация IEventDispatcher не подходит?

не один.