|
|
|||||
Регистрация: Dec 2011
Сообщений: 31
|
Custom Button и EventListener
Доброго времени суток.
Пару месяцев изучаю AS3/Flex, поэтому не судите строго. Ситуация такая, есть собственная кнопка. На ней стоят обработчики событий мыши. Почему-то при обычном нажатии мышкой (MOUSE_DOWN и MOUSE_UP) срабатывают также события MOUSE_OVER и MOUSE_OUT. Помогите разобраться в чем проблема. Код класса кнопки: public class GameButton extends Sprite { private var _normalButtonSkin:SimpleButtonSkin; private var _pushedButtonSkin:SimpleButtonSkin; private var _focusedButtonSkin:SimpleButtonSkin; private var _mouseDown:Boolean = false; private var _text:GameButtonTextField = new GameButtonTextField(); public function GameButton() { super(); addEventListener(MouseEvent.CLICK, mouseClickHandler); addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); addEventListener(MouseEvent.MOUSE_OUT, mouseOutHandler); addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler); addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); createSkins(); } public function set text(value:String):void { _text.text = value; this.width = _text.width + 20 + 2 * _normalButtonSkin.leftWidth; _text.x = this.width / 2 - _text.width / 2; _text.y = this.height / 2 - _text.height / 2; } override public function set width(value:Number):void { _normalButtonSkin.width = value; _pushedButtonSkin.width = value; _focusedButtonSkin.width = value; _text.x = this.width / 2 - _text.width / 2; } private function createSkins():void { _normalButtonSkin = new SimpleButtonSkin({ cb: new ListEmbeddedImage.BUTTON_NORMAL_SKIN, lb: new ListEmbeddedImage.BUTTON_NORMAL_LEFT_SKIN, rb: new ListEmbeddedImage.BUTTON_NORMAL_RIGHT_SKIN}); _pushedButtonSkin = new SimpleButtonSkin({ cb:new ListEmbeddedImage.BUTTON_PUSHED_SKIN, lb:new ListEmbeddedImage.BUTTON_PUSHED_LEFT_SKIN, rb:new ListEmbeddedImage.BUTTON_PUSHED_RIGHT_SKIN}); _focusedButtonSkin = new SimpleButtonSkin({ cb:new ListEmbeddedImage.BUTTON_FOCUSED_SKIN, lb:new ListEmbeddedImage.BUTTON_FOCUSED_LEFT_SKIN, rb:new ListEmbeddedImage.BUTTON_FOCUSED_RIGHT_SKIN}); addChild(_normalButtonSkin); addChild(_pushedButtonSkin); addChild(_focusedButtonSkin); addChild(_text); setVisibleSkin(0); } private function setVisibleSkin(id:uint):void { var i:uint; for (i = 0; i < 3; i++) if (getChildAt(i) as SimpleButtonSkin) getChildAt(i).visible = i == id; } private function mouseOverHandler(e:MouseEvent):void { if (!_mouseDown) { setVisibleSkin(2); trace("overHandler"); } } private function mouseDownHandler(e:MouseEvent):void { _mouseDown = true; setVisibleSkin(1); trace("downHandler"); } private function mouseUpHandler(e:MouseEvent):void { _mouseDown = false; setVisibleSkin(2); trace("upHandler"); } private function mouseOutHandler(e:MouseEvent):void { setVisibleSkin(0); trace("outHandler"); } private function mouseClickHandler(event:MouseEvent):void { setVisibleSkin(1); trace("clickHandler"); } } |
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Символ скрывается, соответственно ему приходит out, показывается - приходит over. Для нормальной работы можно _normalButtonSkin, _pushedButtonSkin, _focusedButtonSkin установить значения mouseEnabled = false и добавить еще один прозрачный слой по размеру кнопки, который не скрывается, чтобы отлавливать события только у одного элемента.
|
|
|||||
Регистрация: Jul 2011
Сообщений: 67
|
А это когда с visible балуешься получается такое.
ведь когда вы вызываете: setVisibleSkin(1); При нажатии, единственный видимый спрайт пропадает и генерируется событие MOUSE_OUT. Я обычно поверх всего помещаю прозрачный прямоугольник, который всегда остаётся на своем месте и уже его подписываю на события. Да и лучше в вектор забить эти скины, как-то не кошерно гетЧилд вызывать. \\ упс опоздал ) |
|
|||||
Регистрация: Dec 2011
Сообщений: 31
|
Спасибо. А каким образом создается эта маска?
|
|
|||||
Регистрация: Nov 2010
Сообщений: 150
|
Просто полностью прозрачный символ (alpha = 0) по форме кнопки, можно использовать к примеру тот же символ что и для _normalButtonSkin.
|
Часовой пояс GMT +4, время: 10:42. |
|
« Предыдущая тема | Следующая тема » |
Теги |
custom component , EventListener , Sprite |
Опции темы | |
Опции просмотра | |
|
|