现在的位置: 首页 > 综合 > 正文

制作SimpleButton及设置显示对象的热区

2016年12月11日 ⁄ 综合 ⁄ 共 1392字 ⁄ 字号 评论关闭

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的时候表现效果是不同的。

利用这种显示对象的热区特性可以实现一些特殊功能,比如显示对象有多个子对象,要快速切换可点击对象,要指定一个热区可点击有效等。

抱歉!评论已关闭.