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的时候表现效果是不同的。
利用这种显示对象的热区特性可以实现一些特殊功能,比如显示对象有多个子对象,要快速切换可点击对象,要指定一个热区可点击有效等。