cocos2d-js 实现观察者模式

原创 2016年08月30日 10:31:18

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式C++实现——观察者模式 (及附带Cocos2d观察者模式代码)

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最...

cocos2d-JS 屏幕适配(5种适配模式)

适配模式     (1)ResolutionPolicy::EXACT_FIT     :拉伸变形,使铺满屏幕。     (2)ResolutionPolicy::NO_BORDER     :...

cocos2d-js实现单击、双击

  • 2017年10月20日 18:35
  • 7.44MB
  • 下载

Cocos2d-JS 3.3 模态对话框的实现

首先,先了解一下什么是模态对话框,百度百科的给出了下面一个定义: 模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对...

Cocos2d-js中实现惯性滑动效果

Cocos2d-js中实现惯性滑动效果 [摘要:甚么是惯性滑动后果呢?我们常常正在脚机上看到一种后果,拖动手机屏幕滑动,把脚摊开后,屏幕仍会由于惯性而滑动一段间隔,那便是一种惯性滑动后果。目前的...

在cocos2d-js实现自动绑定cocostudioUI控件与事件(三)

为cc.Node类型节点注册触摸事件演示常规方式为cc.Node类型注册触摸事件ctor: function() { ... this._label = new ... cc.eve...
  • 6346289
  • 6346289
  • 2015年03月08日 08:33
  • 1531

Cocos2d-js3.3 模态对话框的实现

首先,先了解一下什么是模态对话框,百度百科的给出了下面一个定义: 模态对话框(Modal Dialogue Box,又叫做模式对话框),是指在用户想要对对话框以外的应用程序进行操作时,必须首先对该对话...

Agar 流体效果的 Cocos2d-JS 实现

代码取自 Agar 原版源码,移植到 Cocos2d-JS v3.7 上。 使用方法,新建一个 HelloWorld 工程,将以下代码覆盖新创建的工程的 app.js 文件中的代码即可看到效果,代码中...

Cocos2d-JS实现的贪吃蛇

一、前言相信贪吃蛇大家都玩儿过,我对贪吃蛇的印象就是在电子词典上,一只像素蛇在屏幕游走,饥渴难耐,看着豆子就要去吃,吃到豆子就会长一节,当蛇的身体越来越长的时候,它才发现这个世界变了,每走一步,都是寸...
  • hjcenry
  • hjcenry
  • 2016年09月05日 16:12
  • 912
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cocos2d-js 实现观察者模式
举报原因:
原因补充:

(最多只允许输入30个字)