| AS3有了按钮类:SimpleButton ,可以为四种状态分别指定不同的 DisplayObject 。但是 SimpleButton 没有继承 DisplayObjectContainer 类,也就是不能给它添加其他的 child 。如果要创建一个带文字的 Button 怎么办?两种方案: 
方案一:把文字加到每种 state 里。因为 Shape 也没有继承 DisplayObjectContainer 类,要添加文字 state 就要用 Sprite 。优点是每种状态可以有不同的文字颜色、大小、位置等。缺点是不方便改文字内容。 方案二:把 SimpleButton 和 TextField 一起放到一个 Sprite 里。这样 SimpleButton 的 state 可以用 Shape 以节省内存空间。优缺点和方案一相反。   代码 和 演示 创建一个按钮很简单,为它的四种状态分别指定一个 DisplayObject 就可以了: btn = new SimpleButton();btn.name = "btn";
 btn.downState = new BtnStatusShape2(downColor,w,h);
 btn.overState = new BtnStatusShape2(overColor,w,h);
 btn.upState = new BtnStatusShape2(upColor,w,h);
 btn.hitTestState = btn.upState;
 addChild(btn);
 注意必须指定 hitTestState ,就是Flash IDE里创建 Button 时的 hit 帧,响应鼠标事件的区域,如果没有它按钮就失去作用了。一般设置它和 upState 一样就可以了。 第二种方案的每种 state 都是一个 Shape(→ DisplayObject → EventDispatcher → Object): internal class BtnStatusShape2 extends Shape{public function BtnStatusShape2(bgColor:uint,w:uint,h:uint) {
 graphics.lineStyle(1,0x000000,0.8)
 graphics.beginFill(bgColor,0.8);
 graphics.drawRoundRect(0,0,w,h,8);
 graphics.endFill();
 }
 }
 方案一没有什么好说的。方案二如果想让 btn 响应鼠标事件可以重写装载它的 Sprite 的 addEventListener 方法: public override function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{btn.addEventListener(type,listener);
 }
 要重写继承自父类的方法必须使用 override 关键字。而且重写的方法必须有父类方法完全相同的参数名称、数量和类型。 当然方案二也可以通过监听 MOUSE_OVER、MOUSE_OUT、CLICK 等 MouseEvent 来改变不同状态的文本显示。其他内容参考类代码 。 源文件:button.rar 出处:蓝色理想
责任编辑:moby
 上一页 Function 下一页 label ◎进入论坛Flash专栏版块参加讨论
	      |