2011年2月23日 星期三

[AS3] 使用 Sprite 實體來建立按鈕

Flash本身有Button元件,也有組件Button可以使用,為什麼還要用Sprite類別來建立按鈕?

最近碰到一個狀況,要在Flash上建立類似網頁展開選單的功能,主功能選項旁邊有個「+」,按下去會展開內部的子功能列表,可惜我不是在做網頁,是純Flash,所以只好自己慢慢刻一個。

除了點選「+」會展開子功能列表,每個子功能列表還要有點選的功能,就跟網頁的超連結一樣,如果是單純文字,就算可以點,點起來也一點快感都沒有(我那麼龜毛做什麼=.=),總不能把每個子功能選單都做成Button的模樣,看起來挺蠢的,還有一個原因就是本人的美工很爛,偏好使用組件大於元件,因為組件的設計比較典雅高尚(被踢飛)。




碰到上述的情形,如果你也很龜毛,那麼你也可以試試看用Sprite類別來建立按鈕,顯示效果如下:
(滑鼠移上子選單會顯示手型,就像網頁上的超連結一樣)

//建立主標題文字方塊
var Pre_action:TextField = createTextField(35,80,230,150);
Pre_action.text = "台北市";

var Con:int = 0;//Button"+"、"-"控制器
var container:Sprite = new Sprite();//選單容器
addChild(container);

var names:TextField = new TextField;//建立選單上的文字方塊
names.defaultTextFormat = format;//設定format
names.autoSize = TextFieldAutoSize.LEFT;//預設靠左對齊
names.text = "- 動物園";

var spr:Sprite = new Sprite;//建立Sprite物件
spr.mouseChildren = false;//子系物件不支援滑鼠事件
spr.addChild(names);
spr.x = 35;//設定Sprite的位置x
spr.y = 105;//設定Sprite的位置y
spr.buttonMode = true;//開啟Sprite的按鈕模式

//滑鼠Click監聽事件
spr.addEventListener(MouseEvent.CLICK,showPic);

function showPic(event:MouseEvent):void {
 //按下Sprite按鈕後事件
}

//建立"+"、"-"Button
var add_btn:Button = createButton(15,80,20,20,"+");

//"+"、"-"Button監聽事件 --> "+"變"-"、"-"變"+"
add_btn.addEventListener(MouseEvent.CLICK, showEdit);

function showEdit(event:Event) {
 var buttonInfo:Array = new Array("+","-");//設定Array
 Con = (Con+1)%2;
 add_btn.label = buttonInfo[Con];//每次互換"+"、"-"狀態

 if (Con == 1) {//顯示選單內容 
  addChild(container);
  container.addChild(spr);
 } else {//移除選單內容
  removeChild(container);
 }
}

如果要在增加子選單,那就依照上面的方法自己新增Sprite吧!

沒有留言:

張貼留言