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")
}
  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章