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

Guzzman 15.10.2015 12:04

Пользовательские события
 
Здравствуйте!
Есть такая проблема: Создаю свой класс BrushUpdateEvent extends Event. События у меня находятся в отдельном пакете. Затем это событие dispatchEvent(event) на спрайт(который представляет кнопку на выбор определенного объекта). Диспетчеризация происходит в слушателе события CLICK.

Код AS3:

 
package userEvents
{
        import flash.events.Event;
 
        public class BrushUpdateEvent extends Event
        {
                public static const BRUSH_UPDATE:String = "brushUpdate";
 
                public var field:uint;
                public var typeObj:uint;
                public var variation:uint;       
 
                public function BrushUpdateEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
                {
                        super(type, bubbles, cancelable);
                }
        }
}

Код AS3:

private function hMouseClickTl(e:MouseEvent):void 
                {       
 
                        var brEvent:BrushUpdateEvent = new BrushUpdateEvent(BrushUpdateEvent.BRUSH_UPDATE);
 
                        brEvent.field = _currentField;
                        brEvent.typeObj = (e.currentTarget as ObjectTXR).getIdObj;
                        brEvent.variation = (e.currentTarget as ObjectTXR).currentFrame;
 
                        (e.currentTarget as ObjectTXR).dispatchEvent(brEvent);
                }

Слушатель же регистрируется в пользовательском курсоре, который находится в контейнере Workspace

Код AS3:

package editors 
{
        import flash.display.Sprite;
        import userEvents.BrushUpdateEvent;
        /**
        * ...
        * @author IG
        */

        public class Cursor extends Sprite
        {
                public function Cursor ()
                {
                                this.addEventListener(BrushUpdateEvent.BRUSH_UPDATE, hBrushUpdate);
                }
 
public function hBrushUpdate(e:BrushUpdateEvent):void
                {
                        trace("Update");
                        _field = e.field;
                        _typeObj = e.typeObj;
                        _variation = e.variation;
                }

Куда какой Объект вложен:
----------------------------------Editor
------------------Workspace----------------------Toolsbar
------------Cursor(влож. в спрайт)----------ObjectTXR(влож. в спрайт, который вложен в Toolsbar)

Собственно я менял куда диспетчерить событие, добавлял слушателей в других классах, но событие не слушается(или не диспетчерится). В тоже время есть другая кнопка-триггер в Toolsbar, где по клику диспетчериться событие(в самом классе кнопки) а слушается в Toolsbar. Тут работает все нормально.
Может чего подскажите. Спасибо.

Wolsh 15.10.2015 12:28

То есть, курсор слушает сам себя? А что он хочет услышать, откуда в нем возьмется это событие?

Isfet 16.10.2015 07:48

ну тут два варианта:
Код AS3:

 
public function Cursor (objectTXR:ObjectTXR)
                { //передать в курсор ссылку на  objectTXR
                                objectTXR.addEventListener(BrushUpdateEvent.BRUSH_UPDATE, hBrushUpdate);
                }

или cursor должен быть родителем objectTXR, и у события включить всплытие,

можно еще допустим в Toolsbar ловить событие и вызывать метод hBrushUpdate в курсоре

0l3 24.10.2015 13:48

1. Создаешь отдельный класс с сообщениями и методом их отправки.
2. Где нужно, создаешь экземпляр этого класса и работаешь с ним.
Особенность в том, что этот класс будет отправлять своим сенсорам свои сообщения (пример:ActionScript3 => EventDispatcher. Пример пошаговой работы программы на системе событий).


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

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