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

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

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

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

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

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

测试用素材

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

/**
 * 三种状态切换按钮
 * @author chenkai 2018/8/8
 */
class ThreeButton extends eui.Button{
	public brower:string = "up";           //浏览后打开
	public invite:string = "down";         //邀请后打开
	public opened:string = "disabled";     //已打开

	public constructor() {
		super();
	}

	protected childrenCreated(){
		//默认状态
		this.currentState = this.brower;
	}

	/**
	 * 改变状态
	 * @param state 状态
	 */
	public changeState(state:string){
		this.currentState = state;
	}
}

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

三、实际使用

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

代码中使用

class HomeScene extends eui.Component{
	private btn:ThreeButton;

	public constructor() {
		super();
		this.skinName = "HomeSceneSkin";
	}

	protected childrenCreated(){

		this.btn.changeState(this.btn.brower); //切换到 浏览后打开
		this.btn.changeState(this.btn.invite); //切换到 邀请后打开
		this.btn.changeState(this.btn.opened); //切换到 打开

		this.btn.addEventListener(egret.TouchEvent.TOUCH_TAP, ()=>{
			console.log("click");
		},this);
	}

}

  

四、思考

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

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

原文地址:https://www.cnblogs.com/gamedaybyday/p/9442379.html

时间: 2024-10-12 15:02:06

Egret 中实现3种状态切换按钮的相关文章

01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态

以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根据对象和当前会话的关联状态,我们可以把对象分为三种: 瞬时对象:对象刚刚建立.该对象在数据库中没有记录,也不在ISession缓存中.如果该对象是自动生成主键,则该对象的对象标识符为空. 持久化对象:对象已经通过NHibernate进行了持久化,数据库中已经存在对应的记录.如果该对象是自动生成主键,

ASP.Net中的四种状态保持机制

本文档转载自http://blog.csdn.net/popping_dancer/article/details/7765464 因时间紧迫,未做个人笔记,仅参考. 这几天在学ASP.Net (就是传说中最难的东西)  上课刚听的时候的确有点听不懂 毕竟第一次接触每天晚上回来看视频的时候 才慢慢的恍然大悟 哦~~ 原来是这么回事呀 想必大牛们当初也是这样的感觉吧 哈哈 !今天来说说ASP.Net中的4种状态保持机制 状态保持机制?神马意思?别急 且听我下面慢慢道来 每个人上网可多有过这样的情况

UI--Android中的状态切换按钮自定义

<代码里的世界> -UI篇 用文字札记描绘自己 android学习之路 转载请保留出处 by Qiao http://blog.csdn.net/qiaoidea/article/details/46715453 1.概述 Android中关于控制开关和页面/状态切换的使用场景还是比较多的.源生做的支持也有比如RadioGroup 和Tabhost等.这里准备通过自定义View来模仿学习下IOS两种常见UI样式: SwitchButton 和 SegmentControl. 首先先通过简易的组

cocoStudio: Button三种状态切换

我们在使用cocoStudio工具时,按钮控件Button对应的资源有三种状态, 我们可以分别针对三种状态设置不同的图片.然后在程序中通过方法显示 为不同的状态. 1.初始状态:Normal状态 bool Widget::init() { if (CCNode::init()) { setBright(true); } return false; } 2. /* Button切换到Disable状态(禁止状态),_bright默认为真, 可以调用setBright(false)把Button切换

PE中的两种状态

通过https://www.cnblogs.com/zpchcbd/p/12308184.html的介绍 大家也知道了节数据跟节数据之间,都是根据文件对齐存放的 PE文件有两种状态,一种是在硬盘中的状态,一种是在内存中的状态,上篇文章讲的都是硬盘中存放的时候的状态 例如下图: 在文件中我们的对齐是按照 0x200存放的. 而在内存中就是按照0x1000.假设是1000. 多余的地方补0 我们 的DOS部分 + PE头 + 节表,按照文件对齐之后存放着,节的数据是从400开始 但是在内存中就不一样

Egret中的三种单例写法

1 普通的单例写法 class Single{ private static instance:Single; public static getInstance():Single{ if(this.instance == null){ this.instance = new Single(); } return this.instance; } public run(){ } } Single.getInstance().run(); 2 Module写法.仿照的Egret中Res资源类写法.

WPF中CheckBox三种状态打勾打叉

wpf的CheckBox支持三种状态,但是美中不足的是勾选中是是打勾,但是IsChecked为Fasle时,没显示打叉. 下面代码是自定义Style,打钩打叉: XAML: <Window x:Class="CheckBoxDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsof

Android中使用4种方式实现按钮点击操作

在Android开发中,对控件的操作是最基本的技术,尤其是对按钮的点击操作.我以下总结了4种按钮点击的实现方式.与大家分享,希望大家批评指正. (1)匿名内部类实现 这种方式是最简单的实现,一般刚开始学习Android或者学习基于用户界面的开发,该方法是必学的.实现代码如下: public class MainActivity extends Activity { private Button button; @Override protected void onCreate(Bundle sa

Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过Session持久化操作,缓存中存在这个对象的数据为持久状态并且数据库中存在这个对象对应的数据为持久状态这个时候有OID. 游离状态:当Session关闭,缓存中不存在这个对象数据而数据库中有这个对象的数据并且有OID为游离状态. 注:OID为了在系统中能够找到所需对象,我们需要为每一个对象分配一个