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

DZHETIGAPA 23.02.2011 23:48

Не диспачится событие
 
Пока окончательно события понять не могу. Как я понял, они диспачатся и передаются вверх. Я создаю класс Region и в нем диспатчу событие. Во CS3 создаю различные фигурки и делаю им расширение классом Region. Мне нужно, чтобы в основном классе вызвалось продиспатченное событие в классе Region.
Код AS3:

package  
{
        import flash.display.*;
        import flash.events.*;
        import fl.motion.Color;
 
        public class Region extends MovieClip
        {
 
                public static const CLICK_REG1:String = "clickreg1";
 
                public function Region():void
                {
                        this.addEventListener(MouseEvent.CLICK, onClick)
                }
 
                private function onClick(e:MouseEvent):void
                {
                        e.target.alpha = 0.5;
                        dispatchEvent(new Event(Region.CLICK_REG1))
                }       
 
        }
 
}
 
package 
{
        import flash.display.*;
        import flash.events.*;
        import fl.motion.Color;
 
        public class Shar extends Region
        {
 
                public function Shar():void
                {
 
                }
 
        }
}
 
package 
{
 
        /**
        * ...
        * @author Stas
        */

        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        Всякий код...
 
 
                        Потом, чтобы вызвать событие, продиспатченное в Region, создаю экземпляр его класса
                        var reg:Region = new Region();
                        reg.addEventListener(Region.CLICK_REG1, onClick);
 
                        Но событие не срабатывает.
 
                }
 
                private function onClick(e:Event):void
                {
                        trace("SOS")
                }
        }
 
}

Объясните пожалуйста, почему событие не срабатывает?

dimarik 24.02.2011 00:06

Вы путаете отношения наследования с деревом дисплей-листа.

DZHETIGAPA 24.02.2011 00:15

А объяснить сможете, пожалуйста. Как работает событие и в чем тут ошибка?

Добавлено через 27 минут
Как мне в таком случае вызвать событие, продиспатченное в Region?

mikhailk 24.02.2011 01:12

У Вас событие наверх диспатчится по клику мыша. Нет события клика мыша внутри региона.

DZHETIGAPA 24.02.2011 01:19

Почему это нет события? Вот событие клика внутри Региона
Код AS3:

public function Region():void 
                {
                        this.addEventListener(MouseEvent.CLICK, onClick)
                }
 
                private function onClick(e:MouseEvent):void
                {
                        e.target.alpha = 0.5;
                        dispatchEvent(new Event(Region.CLICK_REG1))
                }


mikhailk 24.02.2011 01:32

поставьте трейс сразу после e.target.alpha = 0.5;
обработчик события есть, просто оно не возникает

Вот рабочий код, если не ждать события MouseEvent.CLICK:

Код AS3:

package  
{
        import flash.display.*;
        import flash.events.*;
 
        public class Region extends MovieClip
        {
 
                public static const CLICK_REG1:String = "clickreg1";
 
                public function Region():void
                {
                }
 
                public function testEvent():void
                {
                        dispatchEvent(new Event(Region.CLICK_REG1))
                }       
 
        }
 
}
 
 
package
{
        import flash.display.Sprite;
        import flash.events.Event;
 
        public class Main extends Sprite
        {
 
                public function Main():void
                {
                        if (stage) init();
                        else addEventListener(Event.ADDED_TO_STAGE, init);
                }
 
                private function init(e:Event = null):void
                {
                        removeEventListener(Event.ADDED_TO_STAGE, init);
                        // entry point
 
                        var reg:Region = new Region();
                        reg.addEventListener(Region.CLICK_REG1, onClick);
                        reg.testEvent();
                }
 
                private function onClick(e:Event):void
                {
                        trace("SOS")
                }
 
        }
 
}


DZHETIGAPA 24.02.2011 01:51

Цитата:

Сообщение от mikhailk (Сообщение 975704)
поставьте трейс сразу после e.target.alpha = 0.5;
обработчик события есть, просто оно не возникает

Мне надо, чтобы событие диспетчеризировалось в Регионе и шло в главный класс. В главном классе при возникновении события будут происходить определенные действия. ИМЕННО В ГЛАВНОМ КЛАССЕ, а не в самом Регионе.
Цитата:

Вот рабочий код, если не ждать события MouseEvent.CLICK:
Этот код-событие срабатывает сразу при добавлении на сцену главного класса. Мне же надо другое.

Ты меня немного не так понял, наверное. Как работает событие я знаю, но вот с пользовательскими событиями - еще путаюсь.

Так как грамотно организовать код?

mikhailk 24.02.2011 15:09

Если поставить трейс внутрь Region.onclick(), станет очевидно, что Region.onclick() не отрабатывает. Будет отрабатывать, будет и событие диспатчиться.

DZHETIGAPA 26.02.2011 17:56

Честно говоря, я так и не понял, о чем вы. Мне нужно вызвать событие в главном классе, продиспатченное в Регионе. Как это сделать? Вот вопрос!

Уважаемый форумчане, кто может ответить на данный вопрос?

cleptoman 26.02.2011 18:22

mikhailk, я так и не понял почему не должен сработать онКлик в риджионе, если он наследник мувика и есть некая кликабельная область (если есть конечно).


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

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