Форум 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=115778)

$mival 10.09.2008 11:48

Не ловится событие
 
Есть класс который наследуется от спрайта, является чилдом stage и подписывается на событие у stage
Код:


public class Panel extends Sprite
{
        public function Panel()
        {
                this.addEventListener(Event.ADDED_TO_STAGE, onAdded);
        }

        private function onAdded(e:Event):void
        {               
                stage.addEventListener(PanelEvent.PANEL_EVENT, addText);
                ...
        }
...
}

в некотором мувике который глубоко по иерархии по нажатию кнопки создается экземпляр класса который стреляет событием

Код:

hit.addEventListener(MouseEvent.CLICK, playClick);

private function playClick(e:MouseEvent):void
{
        new PanelEvent("hello world!");
}

собсна сам PanelEvent

Код:

...
public class PanelEvent extends EventDispatcher
{
        public static const PANEL_EVENT:String = "PanelEvent";
        public var str:String;
       
        public function PanelEvent(text:String)
        {
                str = text;
                dispatchEvent(new Event(PanelEvent.PANEL_EVENT, true));
        }
}

если в мувике с экземпляром класса события написать так
Код:

private function playClick(e:MouseEvent):void
{
        //new PanelEvent("hello world!");
        dispatchEvent(new Event(PanelEvent.PANEL_EVENT, true));
}

то всё работает. почему так происходит?

wvxvw 10.09.2008 12:05

Помоему всплывающие события доступны только наследникам DisplayObject...

mre 10.09.2008 12:08

PanelEvent нужно наследовать от Event а не от EventDispatcher.
И диспатчить событие все равно придется в DisplayObject, который находится в DisplayList.

etc 10.09.2008 12:42

Константа PANEL_EVENT при таком имени должна содержать значение "panelEvent". А вообще, подобное название событие ни о чём не говорит разработчику. «Событие панели». Какое событие? Клик? Перемещение? Никакой информации, совершенно.
Имена событий в Flash Player не от балды написаны, они конкретно описывают происходящее событие. Ваше же — не описывает.

$mival 10.09.2008 12:46

Цитата:

Сообщение от mre (Сообщение 763468)
PanelEvent нужно наследовать от Event а не от EventDispatcher.

Вы не правы, как бы я тогда использовал dispatchEvent()?

Цитата:

Сообщение от mre (Сообщение 763468)
И диспатчить событие все равно придется в DisplayObject, который находится в DisplayList.

действительно :(

etc 10.09.2008 12:51

Цитата:

Сообщение от $mival (Сообщение 763477)
Вы не правы, как бы я тогда использовал dispatchEvent()?

А причем тут сам Event и метод dispatchEvent у EventDispatcher?

$mival 11.09.2008 10:13

Цитата:

Сообщение от __etc (Сообщение 763475)
А вообще, подобное название событие ни о чём не говорит разработчику. «Событие панели». Какое событие? Клик? Перемещение? Никакой информации, совершенно.
Имена событий в Flash Player не от балды написаны, они конкретно описывают происходящее событие. Ваше же — не описывает.

Эта панель ловит только одно событие, так будет всегда.
Именно поэтому оно было названо так.
Или "правила хорошего тона" не позволяют халтурить и в таких случаях? :)

Цитата:

Сообщение от __etc (Сообщение 763485)
А причем тут сам Event и метод dispatchEvent у EventDispatcher?

Ну товарищ mre посоветовал наследоваться от Event,
это мне надо было бы потом создавать внутри класса диспатчер,
отправлять событие, удалять диспатчер.
В чем преимущество наследования от Event а не от EventDispatcher в этом случае?

etc 11.09.2008 10:21

Цитата:

Сообщение от $mival (Сообщение 763666)
Или "правила хорошего тона" не позволяют халтурить и в таких случаях? :)

Халтурить вообще нельзя.

Цитата:

Сообщение от $mival (Сообщение 763666)
В чем преимущество наследования от Event а не от EventDispatcher в этом случае?

Боже мой, Event — это событие, а EventDispatcher — тот, кто их рассылает. EventDispatcher не рассылает EventDispatcher-ы, а вы пытаетесь так сделать, непонятно, на каком основании.

$mival 11.09.2008 10:28

Цитата:

Сообщение от __etc (Сообщение 763667)
Боже мой, Event — это событие, а EventDispatcher — тот, кто их рассылает. EventDispatcher не рассылает EventDispatcher-ы, а вы пытаетесь так сделать, непонятно, на каком основании.

разве я не Event отсылаю?

Код:

dispatchEvent(new Event(PanelEvent.PANEL_EVENT, true));
можете посоветовать как надо на коде?

etc 11.09.2008 10:35

Цитата:

Сообщение от $mival (Сообщение 763669)
разве я не Event отсылаю?

Отсылаете вы Event, конечно, поэтому ваш код работает. А должны рассылать new PanelEvent(PanelEvent.PANEL_EVENT, true) как минимум.

Цитата:

Сообщение от $mival (Сообщение 763669)
можете посоветовать как надо на коде?

Надо открыть документацию по событийной модели ActionScript и всё-всё там прочитать и понять.


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

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