SimpleButton一般用于控制 SWF 文件中按钮元件,一般是由美术人员制作好了按钮素材。
如果在as里创建SimpleButton则需要指定3种状态的皮肤overState,upState,downState,和点击测试对象hitTestState。
这几个state都是显示对象。
hitTestState指定了按钮的点击范围,如果不指定hitTestState或者设置为null,则按钮不可点击(为非活动状态,不响应用户输入事件)。
一般hitTestState指定为overState,表示按钮点击区域与overState皮肤区域一致。
设置其他显示对象做hitTestState时,要注意该显示对象的x,y值,SimpleButton的点击区从该x,y值开始生效。
因为SimpleButton无法添加子对象,最好创建SimpleButton的子类,在子类内部指定state对象。
这是一个实例:
public class CustomSimpleButton extends SimpleButton {
private var upColor:uint = 0xFFCC00;
private var overColor:uint = 0xCCFF00;
private var downColor:uint = 0x00CCFF;
private var size:uint = 80;
public function CustomSimpleButton() {
downState = new ButtonDisplayState(downColor, size);
overState = new ButtonDisplayState(overColor, size);
upState = new ButtonDisplayState(upColor, size);
hitTestState = new ButtonDisplayState(upColor, size * 2);
hitTestState.x = -(size / 4);
hitTestState.y = hitTestState.x;
useHandCursor = true;
}
}
public class ButtonDisplayState extends Shape
{
private var bgColor:uint;
private var size:uint;
public function ButtonDisplayState(bgColor:uint, size:uint) {
this.bgColor = bgColor;
this.size = size;
draw();
}
private function draw():void {
graphics.beginFill(bgColor);
graphics.drawRect(0, 0, size, size);
graphics.endFill();
}
}
运行效果:
红线区域为可点击区,点击区比按钮本身要大,按钮是80x80大小,点击区则是160x160的区域,开始位置为左上角(-20,-20)。
对于MovieClip对象可以通过设置hitArea来指定点击区,doc里说明的比较详细:
注意hitArea不与hitTestState完全一样,在设置为null的时候表现效果是不同的。
利用这种显示对象的热区特性可以实现一些特殊功能,比如显示对象有多个子对象,要快速切换可点击对象,要指定一个热区可点击有效等。