cocos2d-js 实现观察者模式

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");
}

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...