問題:
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")
}