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

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

相关文章推荐

cocos2d-x 观察者模式

游戏中经常遇到几个层之间互相通信的问题。比如,当前页是游戏页,游戏结束的时候,直接显示结算页,不进行转场了,结算页上又有按钮。这时如果要响应按钮点击事件处理一些数据之类的,需要包含别的头文件。这样不太...

cocos2d-x 观察者模式

题目有点大,但是确实就是观察者模式。 游戏中经常遇到几个层之间互相通信的问题。比如,当前页是游戏页,游戏结束的时候,直接显示结算页,不进行转场了,结算页上又有按钮。这时如果要响应按钮点击事件处理...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

观察者模式实现

假定场景:有一设备不断打印数字,若打印数字小于2或者大于8则产生告警。 1.首先定义一个告警接口,此接口实际为一观察者。 package com.boco.design; public in...

详解KVO底层实现

前言KVO: Key-Value-Observer,它来源于观察者模式, 其基本思想(copy于某度)是 一个目标对象管理所有依赖于它的观察者对象,并在它自身的状态改变时主动通知观察者对象。这个主动...

cocos2dx 观察者模式详解

cocos2d-x 观察者模式 游戏中经常遇到几个层之间互相通信的问题。比如,当前页是游戏页,游戏结束的时候,直接显示结算页,不进行转场了,结算页上又有按钮。这时如果要响应按钮点击事...

js观察者模式

发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都将得到通知.详细demo可以参考observer.jsDOM事件实际上我们在DOM节点上绑...

Cocos2d-x观察者模式其实很简单!!--之游戏开发《赵云要格斗》(13)

观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此...

js设计模式-----观察者模式

var shoeObj={};//定义发布者 shoeObj.list=[];//定义缓存列表,存放回调函数 //增加监订阅者 shoeObj.listen=function(fn){ sh...

cocos2dx 观察者模式详解

cocos2d-x 观察者模式 游戏中经常遇到几个层之间互相通信的问题。比如,当前页是游戏页,游戏结束的时候,直接显示结算页,不进行转场了,结算页上又有按钮。这时如果要响应按钮点击事件处理一...

javascript观察者模式

javascript观察者模式观察者模式:当一个对象的状态发生改变,所有依赖于它的对象都将得到通知通用发布订阅var event = { clientList:[], listen: ...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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