Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Получение пользовательского события. (http://www.flasher.ru/forum/showthread.php?t=167948)

Luixoru 14.09.2011 22:06

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

Класс-наследник EventDispatcher'а:
Код AS3:

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:
Код AS3:

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:
Код AS3:

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/showthre...ght=usecapture
http://www.flasher.ru/forum/blog.php?b=85
Скидываю то, что сейчас в кладках браузера открыто по пользовательским событиям :)

Luixoru 14.09.2011 22:22

Цитата:

Сообщение от Genm (Сообщение 1031515)

По этой ссылке модифицированный EventDispatcher, и, вообщем, даже без пользовательского диспетчеризационного класса у меня не работает мой метод.

andrew911 14.09.2011 22:23

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

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

Genm 14.09.2011 22:24

Код AS3:

Broadcaster.addEventListener(EventAdvanced.MINUS, tracer)
Broadcaster.broadcastEvent(new CustomEvent(EventAdvanced.MINUS))

Должно же работать...

Luixoru 14.09.2011 22:25

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

Добавлено через 1 минуту
Цитата:

Сообщение от Genm (Сообщение 1031518)
Код AS3:

Broadcaster.addEventListener(EventAdvanced.MINUS, tracer)
Broadcaster.broadcastEvent(new CustomEvent(EventAdvanced.MINUS))

Должно же работать...

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

andrew911 14.09.2011 22:34

Цитата:

Сообщение от Luixoru (Сообщение 1031519)
Ресивер слушает событие EventAdvanced.MINUS, вон у него в конструкторе стоит addEventListener.

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


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

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

Luixoru 14.09.2011 22:34

Цитата:

Сообщение от andrew911 (Сообщение 1031517)
+ У вас нигде не сохраняется на него ссылка.

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

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

Добавлено через 17 минут
Цитата:

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

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

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

andrew911 14.09.2011 23:38

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

Ссылка на ресивер.
Вы его создаете, как локальную переменную и все.
Код AS3:

var reciever:Reciever = new Reciever();

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

Silicium 17.09.2011 22:12

Цитата:

Код AS3:

this.addEventListener(EventAdvanced.MINUS, tracer);


Так ресивер на себя слушателя вешает. А событие диспатчит экземпляр диспатчера. Тут ничего и не должно происходить... Или я чего-то не догоняю :-/


Часовой пояс GMT +4, время: 17:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2022, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.