менее громоздко:

Код AS3:
package ui.buttons
{
import flash.display.Sprite;
import flash.events.MouseEvent;
/**
* ...
* @author Ookami
*/
public class Button extends Sprite
{
private var stateNorm:Sprite;
private var stateOver:Sprite;
private var stateDown:Sprite;
/*
* Конструктор класса
*/
public function Button(spriteNorm:Sprite, spriteOver:Sprite, spriteDown:Sprite)
{
/**
* Формирование тела кнопки
*/
stateNorm = spriteNorm;
stateOver = spriteOver;
stateDown = spriteDown;
addChild(stateNorm);
addChild(stateOver);
addChild(stateDown);
stateOver.visible = false;
stateDown.visible = false;
/**
* Прослушка событий
*/
addEventListener(MouseEvent.MOUSE_OVER, onMouseEvent);
addEventListener(MouseEvent.MOUSE_OUT, onMouseEvent);
addEventListener(MouseEvent.MOUSE_DOWN, onMouseEvent);
addEventListener(MouseEvent.MOUSE_UP, onMouseEvent);
}
/*
* Фокус мыши на кнопке
*/
private function onMouseEvent(event:MouseEvent):void
{
stateNorm.visible = false;
stateOver.visible = false;
stateDown.visible = false;
switch (event.type)
{
case MouseEvent.MOUSE_OVER:
{
stateOver.visible = true;
break;
}
case MouseEvent.MOUSE_OUT:
{
stateNorm.visible = true;
break;
}
case MouseEvent.MOUSE_DOWN:
{
stateDown.visible = true;
break;
}
case MouseEvent.MOUSE_UP:
{
stateNorm.visible = true;
break;
}
}
}
}
}
Цитата:
|
небольшое уточнение, из за того что у меня есть еще и textField поверх всех этих спрайтов, то возникал небольшой касячок при обработке фокуса и нажатия мыши. А именно нажатие срабатывало только на текстовом поле. Я так понял это из за того что спрайты скрываются. Я сделал еще один спрайт который содержит прозрачный png размером ровно с мою кнопку и поместил этот спрайт поверх всех остальных. Так обработка нажатия мыши срабатывает корректно.
|
Можно запретить чайлдам кнопки реагировать на мышь - так проще. Добавьте в конструктор класса

Код AS3:
mouseChildren = false;