一起來玩鳥 Starling Framework(3)Button!
週末夜來介紹個簡單的DisplayObject就好。不論是在電腦上或行動裝置上,跟使用者互動次數最多的,大概就是按鈕了。因此,Starling有個Button類別,來做出這個常用的互動元件。
同樣是因為由Sparrow移植過來的影響,Button的行為完全是行動裝置上的按鈕。它只有一個一般狀態的Texture,按鈕上的文字,以及壓下狀態的Texture(也可以不要)。事件只有一個:Event.TRIGGERED。沒有mouse over的狀態,也沒有useHandCursor可用。
Document Class依然不需要更動,再新增一個Game3.as當做Starling的rootClass,程式碼如下
publicclassGame3extendsSprite
{
privatevar _container:Sprite;
privatevar _msgText:TextField;
[Embed(source ="/assets/btnBg.png")]
privatestaticconstBtnBitmap:Class;//embed一張圖片當做Button平常的狀態
[Embed(source ="/assets/btnDownBg.png")]
privatestaticconstBtnDownBitmap:Class;//embed一張圖片當做Button壓下的狀態
publicfunctionGame3()
{
super();
addEventListener(Event.ADDED_TO_STAGE, init);
}
privatefunction init(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_container =newSprite();
addChild(_container);
addChild(newStats());
var menu:Sprite=newSprite();//新增一個Sprite當做所有Button的容器
menu.x =100;//設定menu座標
menu.y =30;//設定menu座標
_container.addChild(menu);//menu加到場景上
_msgText =newTextField(300,20,"No Button Triggered.","Arial",14,0xFF0000,true);//新增一個TextField來顯示Button的狀態
_msgText.x =100;//設定_msgText座標
_msgText.y =80;//設定_msgText座標
_msgText.hAlign =HAlign.LEFT;//設定_msgText文字靠左對齊
_container.addChild(_msgText);//將_msgText加到場景上
var btnTexture:Texture=Texture.fromBitmap(newBtnBitmap());//從embed圖片產生button平常狀態的Texture
var btnDownTexture:Texture=Texture.fromBitmap(newBtnDownBitmap());//從embed圖片產生button壓下狀態的Texture
var btnTexts:Vector.<String>=newVector.<String>();//用一個Vector先將Button的文字存放起來
btnTexts.push("About");//加入第一個Button文字
btnTexts.push("Works");//加入第二個Button文字
btnTexts.push("Video");//加入第三個Button文字
btnTexts.push("Contact");//加入第四個Button文字
var btnNum:uint= btnTexts.length;//Button個數
var button:Button;//button用來當參照
for(var i:int=0; i < btnNum; i++)//用個迴圈設定四個button
{
button =newButton(btnTexture, btnTexts[i], btnDownTexture);//新增一個Button
button.x = i *150;//設定button座標
button.name ="btn"+ btnTexts[i];//設定button的name
button.alphaWhenDisabled =0.5;//如果button disable時alpha會自動變成0.5
menu.addChild(button);將button加到場景上
}
button.enabled =false;//寫在迴圈外,我們故意將最後一個button disable
menu.addEventListener(Event.TRIGGERED, buttonTriggered);//Event.TRIGGERED會bubble,所以只要對menu監聽就好
}
privatefunction buttonTriggered(e:Event):void
{
_msgText.text =Button(e.target).name +" triggered!";//顯示哪個Button被triggered
}
}
首先embed兩張圖分別當做Button的up state與down state時的Texture。然後先用一個Sprite menu當做容器,再將四個Button建立起來,放到這個容器裡面我們另外在場景上加了一個TextField用來顯示等等哪個Button被triggered的訊息。。Button有很多跟font有關的屬性可以設定文字的字型、字級、粗體等等來設定文字的樣式,如果配合BitmapFont就可以做出更多樣性的Button。關於BitmapFont之後再聊。加完四個Button後,我們故意將最後一個Button的enabled屬性設為false,用來觀察alphaWhenDisabled這個屬性的效果。這是當Button disable時,Button自動會改變自己的alpha值,直到恢復enable時,alpha會自動回到1。最後我們對加上menu加上Event.TRIGGERED監聽,因為這個事件預設是會bubble的,所以對外面的容器監聽就好。而事件發生時就會告訴我們哪個Button被triggered了。Event.TRIGGERED的發生跟MouseEvent.CLICK一樣,要在Button被按下,又在Button裡面放開時才會觸發。Demo如下:

一起來玩鳥 Starling Framework(3)Button!的更多相关文章
- 一起來玩鳥 Starling Framework 簡介
開場 Starling Framework是一套Flash 2D遊戲開發"工具",是使用Flash最新的Stage3D API建構出來的一套Framework.最大優點在於使用GP ...
- 一起來玩鳥 Starling Framework(5)Multi-Touch
這篇來談談Starling的Multi-Touch.前一篇也提到,Multi-Touch一樣是監聽TouchEvent.TOUCH,然後由TouchEvent的e.getTouches()取回多點的資 ...
- 一起來玩鳥 Starling Framework(2)效能測試以及Image與Texture
上一篇我們放了一個Quad與TextField在舞台上慢慢轉.眼尖的可能會發現轉起來邊緣有點鋸齒,這可以透過設定Starling的反鋸齒來解決,在Main.as裡,新增了_starling之後,可以加 ...
- 一起來玩鳥 Starling Framework(1)一定要的Hello World!
雖然已經一堆Hello World的介紹文章跟影片了,但中文資料畢竟是比較少,所以不能免俗的來一篇中文版Hello World.首先開啟一個AS3.0專案,fps不用客氣,設為60,Starling很 ...
- 一起來玩鳥 Starling Framework(6)Juggler、Tween、以及DelayCall
這篇開始來講Starling裡的Animation.Juggle是個簡單的Class,用來控制動畫的進行.他負責管理經由add()加進來的實現IAnimatable介面的物件,然後當Juggler的a ...
- 一起來玩鳥 Starling Framework(7)MovieClip
承上一篇,我們接著來講最後一個IAnimatable類別,MovieClip.Starling的MovieClip跟native的MovieClip不太一樣,它只能接收一個Vector.<Tex ...
- 一起來玩鳥 Starling Framework(4)TouchEvent,Touch,以及TouchPhase
這一篇來介紹一下TouchEvent.我們先來談單點的touch,下一篇再介紹MultiTouch.翻過Starling文件的應該會發現,Starling裡面沒有MouseEvent,而是整合在Tou ...
- 一起來玩鳥 Starling Framework(9)Particle
最後,來看看Starling裡一個很炫的功能:Particle.Particle屬於extension,所以要另外下載檔案:Starling-Extension-Particle-System.下載之 ...
- 一起來玩鳥 Starling Framework(8)BitmapFont
所謂BitmapFont,就是事先將我們會用到的字型,會用到的字,輸出成一張圖片,類似Sprite sheet,以及一個xml格式的Data file,然後我們一次將這文字圖片轉成Texture,up ...
随机推荐
- return 与 exit() 的区别
return是一个关键字,返回函数值:exit()是一个函数: return是语言级的:exit()是操作系统提供的函数: return表示函数退出:exit()表示进程退出: 非主函数中调用retu ...
- linux 系统函数之 (dirname, basename)【转】
转自:http://blog.csdn.net/peter_cloud/article/details/9308333 版权声明:本文为博主原创文章,未经博主允许不得转载. 除非你的原件考虑跨平台. ...
- VS mfc MessageBox() 和 AfxMessageBox()
转载:http://blog.csdn.net/phenixyf/article/details/41744039 一.MessageBox()用法 1.函数原型 Messagebox函数在Win32 ...
- 关于Solaris的一些小技巧
关于Solaris的一些小技巧 http://blog.chinaunix.net/uid-9787800-id-2394301.html SunOS 操作命令及linux区别 http://blog ...
- zabbix ZBX_NOTSUPPORTED: Timeout while executing a shell script.
有一个监控一直都是正常的,今天突然收到报警邮件,上服务器查看服务又是正常的,但是报警邮件还是没恢复 监控端进行脚本测试,发现是正常的 到监控端使用zabbix_get -s ip -p 端口 -k ...
- [ Python -1 ] 简易购物车程序
练习: 1. 要求用户输入总资产,例如:2000 2. 显示商品列表,让用户根据序号选择商品,加入购物车 3. 购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功. goods = [{' ...
- Tomcat 部署2个项目,只有一个可以访问的解决方案
Tomcat 部署2个应用后只有一个可以访问,另一个不能访问,一般来说就是因为Tomcat启动加载了配置文件后,当启动另一个应用时由于一些配置名称相同所以不再加载,导致之后应用无法正常启动. 异常信息 ...
- k8s的Dashboard
前面章节 Kubernetes 所有的操作我们都是通过命令行工具 kubectl 完成的.为了提供更丰富的用户体验,Kubernetes 还开发了一个基于 Web 的 Dashboard,用户可以用 ...
- Laravel查询技巧
1.同时增加几个字段的数量 DB::table('project') ->where('id',$yewuid) ->increment('count', 1, [ 'click'=> ...
- Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)
直接上代码: Activity管理类:AppManager /** * 应用程序Activity管理类:用于Activity管理和应用程序退出 * * @author BiHaidong * @ver ...