![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2010
Сообщений: 170
|
Всем доброго вечера!
У меня есть базовый класс RenderWindow от которого наследуется любое GUI. Собственно поведение RenderWindow устроено так, что он обрабатывает события мыши и посылает события с типом произошедшего события мыши. Собственно вот как это устроено: package d.app.render { import d.app.event.AppEvent; import d.app.event.appEvent.WindowAppEvent; import flash.display.DisplayObject; import flash.events.MouseEvent; public class RenderWindow extends RenderObject { public static const RW_TYPE_ROOT :uint = 0; public static const RW_TYPE_MAIN_MENU :uint = 1; public static const RW_TYPE_MAIN_MENU_BUTTON :uint = 2; public static const RW_TYPE_CONTEXT_MENU :uint = 3; public static const RW_TYPE_CONTEXT_MENU_ITEM :uint = 4; public static const RW_TYPE_TEXT_BUTTON :uint = 5; protected var rwType:uint=RW_TYPE_ROOT; protected var rwIsListener:Boolean=false; protected var rwIsDown:Boolean=false; public function RenderWindow(_type:uint,_name:String,_parent:RenderObject,_display:DisplayObject) { super(RO_TYPE_WINDOW,_name,_parent,_display); rwType=_type; mouseEnabled=true; } public final function rwGetType():uint { return rwType; } public function rwBegin():void { } public function rwUpdate():void { } public function rwResize():void { } public function rwEnd():void { } public override function roEnable():Boolean { if(roIsEnable) return false; roIsEnable=true; if(!rwIsListener) { addEventListener(MouseEvent.MOUSE_OUT,rwOnMouseOut); addEventListener(MouseEvent.MOUSE_OVER,rwOnMouseOver); addEventListener(MouseEvent.MOUSE_MOVE,rwOnMouseMove); addEventListener(MouseEvent.MOUSE_DOWN,rwOnMouseDown); addEventListener(MouseEvent.MOUSE_UP,rwOnMouseUp); } rwOnEnable(); return true; } public override function roDisable():Boolean { if(!roIsEnable) return false; if(rwIsListener) { removeEventListener(MouseEvent.MOUSE_OUT,rwOnMouseOut); removeEventListener(MouseEvent.MOUSE_OVER,rwOnMouseOver); removeEventListener(MouseEvent.MOUSE_MOVE,rwOnMouseMove); removeEventListener(MouseEvent.MOUSE_DOWN,rwOnMouseDown); removeEventListener(MouseEvent.MOUSE_UP,rwOnMouseUp); } roIsEnable=false; rwOnDisable(); return true; } protected function rwOnEnable():void { } protected function rwOnDisable():void { } public override function roLock():Boolean { if(roIsLock) return false; roIsLock=true; if(!rwIsListener) { addEventListener(MouseEvent.MOUSE_OUT,rwOnMouseOut); addEventListener(MouseEvent.MOUSE_OVER,rwOnMouseOver); addEventListener(MouseEvent.MOUSE_MOVE,rwOnMouseMove); addEventListener(MouseEvent.MOUSE_DOWN,rwOnMouseDown); addEventListener(MouseEvent.MOUSE_UP,rwOnMouseUp); } rwOnLock(); return true; } public override function roUnlock():Boolean { if(!roIsLock) return false; if(rwIsListener) { removeEventListener(MouseEvent.MOUSE_OUT,rwOnMouseOut); removeEventListener(MouseEvent.MOUSE_OVER,rwOnMouseOver); removeEventListener(MouseEvent.MOUSE_MOVE,rwOnMouseMove); removeEventListener(MouseEvent.MOUSE_DOWN,rwOnMouseDown); removeEventListener(MouseEvent.MOUSE_UP,rwOnMouseUp); } roIsLock=false; rwOnUnlock(); return true; } protected function rwOnLock():void { } protected function rwOnUnlock():void { } protected function rwOnMouseOut(_event:MouseEvent):void { rwIsDown=false; dispatchEvent(new WindowAppEvent(AppEvent.WINDOW_OUT,this)); rwOnAdditionMouseOut(_event); } protected function rwOnMouseOver(_event:MouseEvent):void { rwIsDown=false; dispatchEvent(new WindowAppEvent(AppEvent.WINDOW_OVER,this)); rwOnAdditionMouseOver(_event); } protected function rwOnMouseMove(_event:MouseEvent):void { dispatchEvent(new WindowAppEvent(AppEvent.WINDOW_MOVE,this)); rwOnAdditionMouseMove(_event); } protected function rwOnMouseDown(_event:MouseEvent):void { rwIsDown=true; dispatchEvent(new WindowAppEvent(AppEvent.WINDOW_DOWN,this)); rwOnAdditionMouseDown(_event); } protected function rwOnMouseUp(_event:MouseEvent):void { if(rwIsDown) dispatchEvent(new WindowAppEvent(AppEvent.WINDOW_CLICK,this)); rwIsDown=false; rwOnAdditionMouseUp(_event); } protected function rwOnAdditionMouseOut(_event:MouseEvent):void { } protected function rwOnAdditionMouseOver(_event:MouseEvent):void { } protected function rwOnAdditionMouseMove(_event:MouseEvent):void { } protected function rwOnAdditionMouseDown(_event:MouseEvent):void { } protected function rwOnAdditionMouseUp(_event:MouseEvent):void { } } } И вот я от RenderWindow наследую два класса: 1. GUIMainMenu 2. GUIMenuButton GUIMenuButton я прикрепляю к GUIMainMenu в контейнер его. И вот в чём ошибка: когда я тыкаю мышкой на GUIMenuButton, у меня вызывается два события: 1. Событие GUIMenuButton 2. Событие GUIMainMenu Почему так? Ведь GUIMenuButton лежит в GUIMainMenu и перекрывает его. Тогда почему два события происходят? |
![]() |
Часовой пояс GMT +4, время: 21:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|