加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-js 实现观察者模式

发布时间:2020-12-14 17:11:14 所属栏目:百科 来源:网络整理
导读:1. 手动管理观察者listenerName 2. 确保只有注册过的才能下发事件 3. 当前模式只支持唯一观察者listenerName,不支持共享 4. 在切换到登录界面时要清空所有listener HelpTool._listenerList = {};HelpTool.setListenerFlag = function(listenerNameTable,fla

1. 手动管理观察者listenerName

2. 确保只有注册过的才能下发事件

3. 当前模式只支持唯一观察者listenerName,不支持共享

4. 在切换到登录界面时要清空所有listener

HelpTool._listenerList = {};

HelpTool.setListenerFlag = function(listenerNameTable,flag) {
    for (var i = 0; i < listenerNameTable.length; i++) {
        if (flag == false && HelpTool._listenerList[listenerNameTable[i]]) {
            cc.eventManager.removeCustomListeners(listenerNameTable[i]);
        }
        HelpTool._listenerList[listenerNameTable[i]] = flag;
        cc.log("xiaohei " + (flag ? "enable" : "disable") + " listener id: " + listenerNameTable[i]);
    }
};

HelpTool.disableAllListeners = function() {
    for (var k in HelpTool._listenerList) {
        HelpTool._listenerList[k] = false;
        cc.eventManager.removeCustomListeners(k);
        cc.log("xiaohei set and remove all listeners flag is false " + k);
    }
};

HelpTool.dispatchListener = function(listenerName,patchdata) {
    if (HelpTool._listenerList[listenerName]) {
        cc.log("xiaohei dispatch listener id: " + listenerName);
        var dataTable = patchdata || {};
        cc.eventManager.dispatchCustomEvent(listenerName,dataTable);
    } else {
        cc.log("xiaohei listener the " + listenerName + " flag is " + HelpTool._listenerList[listenerName]);
    }
};

注册:
onExit: function() {
    HelpTool.setListenerFlag(["msg_superstar_currency_change","msg_superstar_state_change"],false);
},init: function() {
    // xiaohei add listener
    cc.eventManager.addCustomListener("msg_superstar_currency_change",function(args) {
        this.updateMoneyNum();
    }.bind(this));
    cc.eventManager.addCustomListener("msg_superstar_state_change",function(args) {
        this.onUpdateState();
    }.bind(this));
    HelpTool.setListenerFlag(["msg_superstar_currency_change",true);
},

下发:
HelpTool.dispatchListener("msg_superstar_currency_change");


注销:(主城的onExit中调用)

onExit: function () {
  cc.AudioEngine.getInstance().stopMusic("res/audio/bgm/BGM_mainui_1.mp3");
  this._super();

  HelpTool.disableAllListeners();
  cc.log("#### HomeScene on exit");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读