Egret 中实现3种状态切换按钮

一、游戏中的常用3种状态按钮

Egret种提供了2种状态切换的按钮ToggleButton。

 但是在游戏中常用到3种状态的按钮,比如任务系统的领取、已领取、未领取。

比如下图中宝箱的打开、浏览后打开、邀请后打开

二、利用eui.Button来实现3种状态切换按钮

测试用素材

继承eui.Button,并实现3种状态切换按钮

1/** 2 * 三种状态切换按钮 3 * @author chenkai 2018/8/8 4 */ 5class ThreeButton extends eui.Button{ 6 public brower:string = "up"; //浏览后打开 7 public invite:string = "down"; //邀请后打开 8 public opened:string = "disabled"; //已打开 9 10 public constructor() { 11 super(); 12 } 13 14 protected childrenCreated(){ 15 //默认状态 16 this.currentState = this.brower; 17 } 18 19 /** 20 * 改变状态 21 * @param state 状态 22 */ 23 public changeState(state:string){ 24 this.currentState = state; 25 } 26}

这里的关键点是主动设置currentState属性后,按钮的点击处理中getCurrentState就会被忽略,意味着你点击这个Button后,它不会在弹起时显示up的图,在按下时显示down的图。

三、实际使用

 拖动一个ThreeButton到exml,并赋值3种状态的图

 

 代码中使用

1class HomeScene extends eui.Component{ 2 private btn:ThreeButton; 3 4 public constructor() { 5 super(); 6 this.skinName = "HomeSceneSkin"; 7 } 8 9 protected childrenCreated(){ 10 11 this.btn.changeState(this.btn.brower); //切换到 浏览后打开 12 this.btn.changeState(this.btn.invite); //切换到 邀请后打开 13 this.btn.changeState(this.btn.opened); //切换到 打开 14 15 this.btn.addEventListener(egret.TouchEvent.TOUCH_TAP, ()=>{ 16 console.log("click"); 17 },this); 18 } 19 20}

 四、思考

1. 如果有四种,或更多种状态按钮,该如何实现。

    得额外写自定义组件,不能方便的继承eui.Button来实现了。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

thinkcmf+jsapi 实现微信支付

首先从小程序端接收订单号、金额等参数,然后后台进行统一下单,把微信支付的订单号返回,在把订单号发送给前台,前台拉起支付,返回参数后更改支付状态。。。回调publicfunctionnotify(){$wechatDb::name('wechat')where('status',1)find();

4、jstack查看线程栈信息

1、介绍利用jps、top、jstack命令找到进程中耗时最大的线程,以及线程状态等等,同时最后还可以显示出死锁的线程查找:FoundoneJavaleveldeadlock即可1、jps获得进程号!(https://oscimg.oschina.net/oscnet/da00a309fa6