Cocos Creator的按钮点击事件

问题:
1.按钮点击一般都会有点击音效,cc.Button中没有点击音效的方法
2.按钮的防连击,比如请求服务器消息按钮,可能用户不小心有多点了几次,造成多次向服务器发送请求

解决思路:
采用包装者模式,将按钮点击事件简单的封装下

代码如下

export class UIEventCenter {

    /**
	* 
	* @param btn 点击按钮
	* @param callback 点击按钮事件
	* @param clickSoundName 点击按钮音效名
	* @param disableTime 禁用按钮时长
	*/
    public static ButtonEvent(btn: cc.Button, callback: Function, clickSoundName: string = "S_Button", disableTime: number = 0.4) {
        btn.node.on("click", () => {
            if (!btn.interactable) {
                return;
            }
            if (clickSoundName) {
                //这里是博主自己封装的声音加载方案,你们可以改用自己的声音加载,只要能播放音效即可
                AudioManager.PlaySound(clickSoundName);
            }
            //如果屏蔽时间大于0,点击之后屏蔽
            if (disableTime > 0) {
                btn.interactable = false;      //禁用按钮 一定时间后再启用,防连击
                window.setTimeout(() => { if (btn) { btn.interactable = true } }, disableTime*1000)
            }
            callback()
        })
    }
}

使用示例

start() {
	//示例1:this._btnQQLoign为QQ登录按钮,点击音效为UIEventCenter里的默认音效
  	UIEventCenter.ButtonEvent(this._btnQQLoign, () => { this.onBtnQQLoginClick() })
  	//示例2:this._btnTest为测试按钮,音效改用S_Test,而不用默认音效,点击后禁用时长改为1秒
  	UIEventCenter.ButtonEvent(this._btnTest, () => { this.onBtnTestClick() },"S_Test",1)
}

private onBtnQQLoginClick() {
    cc.log("onBtnQQLoginClick")
}

private onBtnTestClick() {
    cc.log("onBtnTestClick")
}
  

你可能感兴趣的:(Cocos,Creator)