PDA

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


Luixoru
14.09.2011, 22:06
Добрый день, не могу никак сделать такую ситуацию:
Есть пользовательский класс-наследник EventDispatcher, есть класс Dispatcher, в котором создается экземпляр наследника EventDispatcher, а затем диспетчеризуется событие, и есть класс Reciever, в котором регистрируется прослушка этого события. Но событие не приходит! Не могу понять что не так.

Класс-наследник EventDispatcher'а:
import flash.events.EventDispatcher;
import flash.events.Event;

class EventAdvanced extends EventDispatcher {
public static const MINUS:String = 'minus';

public function goMinus():void {
this.dispatchEvent(new Event(EventAdvanced.MINUS));
}
}


Класс Dispatcher:
import flash.display.Sprite;

public class Dispatcher extends Sprite{

public var someDispatcher:EventAdvanced;

public function Dispatcher() {
someDispatcher = new EventAdvanced();
var reciever:Reciever = new Reciever();
someDispatcher.goMinus();
}
}


Класс Reciever:
import flash.events.Event;
import flash.display.Sprite;

public class Reciever extends Sprite{

public function Reciever() {
this.addEventListener(EventAdvanced.MINUS, tracer);
}

public function tracer(e:Event){
trace('-1');
}
}


Заранее спасибо за помощь :)

Genm
14.09.2011, 22:08
http://www.flasher.ru/forum/showthread.php?t=120539&highlight=usecapture
http://www.flasher.ru/forum/blog.php?b=85
Скидываю то, что сейчас в кладках браузера открыто по пользовательским событиям :)

Luixoru
14.09.2011, 22:22
http://www.flasher.ru/forum/blog.php?b=85
По этой ссылке модифицированный EventDispatcher, и, вообщем, даже без пользовательского диспетчеризационного класса у меня не работает мой метод.

andrew911
14.09.2011, 22:23
А что у вас слушает ресивер?
+ У вас нигде не сохраняется на него ссылка.

Судя по названию класс Dispatcher я бы предположил, что он диспатчит событие.

Genm
14.09.2011, 22:24
Broadcaster.addEventListener(EventAdvanced.MINUS, tracer)
Broadcaster.broadcastEvent(new CustomEvent(EventAdvanced.MINUS))
Должно же работать...

Luixoru
14.09.2011, 22:25
Ресивер слушает событие EventAdvanced.MINUS, вон у него в конструкторе стоит addEventListener.

Добавлено через 1 минуту
Broadcaster.addEventListener(EventAdvanced.MINUS, tracer)
Broadcaster.broadcastEvent(new CustomEvent(EventAdvanced.MINUS))
Должно же работать...
Не очень бы хотелось импортировать чужой класс, лучше бы разобраться со своими ошибками.
Мне кажется ошибка в понимании, как работают события, но не знаю в чем. :)

andrew911
14.09.2011, 22:34
Ресивер слушает событие EventAdvanced.MINUS, вон у него в конструкторе стоит addEventListener.

Мне кажется ошибка в понимании, как работают события, но не знаю в чем. :)


Так и есть.
Я спросил не какое событие слушает ресивер, а что он слушает.
Слушатель может услышать событие, слушая объект, который, его испустил. (+ события могут всплывать по списку отображения).

http://help.adobe.com/ru_RU/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fca.html

Luixoru
14.09.2011, 22:34
+ У вас нигде не сохраняется на него ссылка.

Судя по названию класс Dispatcher я бы предположил, что он диспатчит событие.
Ссылка на что?
Прошу прощения за такие названия, Dispatcher лишь создает экземпляр диспетчера, который уже сам диспатчит.

Добавлено через 17 минут
Так и есть.
Я спросил не какое событие слушает ресивер, а что он слушает.
Слушатель может услышать событие, слушая объект, который, его испустил. (+ события могут всплывать по списку отображения).

http://help.adobe.com/ru_RU/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7fca.html
Перечитал несколько раз, так и не понял "что он слушает".
А за вторую фразу спасибо, понял в чем была ошибка :)

andrew911
14.09.2011, 23:38
Вторая фраза это продолжение первой - какой объект он слушает, имелось в виду.

Ссылка на ресивер.
Вы его создаете, как локальную переменную и все.
var reciever:Reciever = new Reciever();

При вызове сборщика мусора он исчезнет.

Silicium
17.09.2011, 22:12
this.addEventListener(EventAdvanced.MINUS, tracer);
Так ресивер на себя слушателя вешает. А событие диспатчит экземпляр диспатчера. Тут ничего и не должно происходить... Или я чего-то не догоняю :-/

Wolsh
17.09.2011, 23:43
Или я чего-то не догоняю :-/Только то, что на вопрос уже ответили и автор сказал "спасибо".

Silicium
18.09.2011, 18:08
Перечитал несколько раз, так и не понял "что он слушает".
А за вторую фразу спасибо, понял в чем была ошибка
а, да, не заметил... прошу прощения))