PDA

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


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


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);
}
}
}

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

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
ну тут два варианта:

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. Пример пошаговой работы программы на системе событий (http://shcherbyna.my-board.org/ru/it/coding)).