Доброго времени суток.
Пару месяцев изучаю AS3/Flex, поэтому не судите строго.
Ситуация такая, есть собственная кнопка. На ней стоят обработчики событий мыши. Почему-то при обычном нажатии мышкой (MOUSE_DOWN и MOUSE_UP) срабатывают также события MOUSE_OVER и MOUSE_OUT. Помогите разобраться в чем проблема.
Код класса кнопки:

Код AS3:
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");
}
}
при нажатии в дебаге следующее:

Код:
[trace] downHandler // нажал
[trace] outHandler
[trace] outHandler
[trace] upHandler // отпустил
[trace] outHandler
[trace] overHandler