在cocos2dx 3.x版本已经被弃用,改用EventDispatcher代替。

观察者模式是MVC模式的一种,一个model可以对应很多个观察者view,当model收到事件通知时,对应的view

马上处理事件。比如在游戏中,网络发送http,当有数据回来时,需要改变界面的一些状态或者更新数据等等操作。

在Node节点中,有一个EventDispatcher* _eventDispatcher属性,可以通过getEventDispatcher()方法获取,

EventDispatcher类里面主要是通过一个vector存储所有要监听的事件,然后在接收信息时,遍历所有要监听的

消息,判断消息类型进行毁掉。

以下是使用EventDispatcher的lua方法:

local layer = cc.Layer:create()--创建一个layer

self:addChild(layer)--添加到场景中

self._counter = 0

local function eventCustomListener1(event)--创建一个事件回调函数

self._counter = self._counter + 1

release_print(self._counter)

end

local listener1 = cc.EventListenerCustom:create("testEvent",eventCustomListener1)--创建一个监听事件,第一个参数是事件的键值名(事件名)

第二个参数是回调函数。

local function eventCustomListener2(event)--创建第二个事件

release_print(event._myName)

end

local listener2 = cc.EventListenerCustom:create("testEvent",eventCustomListener2)

local eventDispatcher = layer:getEventDispatcher()--获取节点的EventDispatcher

eventDispatcher:addEventListenerWithFixedPriority(listener1,1)--把两个监听事件添加到eventDispatcher,并且设置权重

eventDispatcher:addEventListenerWithFixedPriority(listener2,2)

使用eventDispatcher:dispatchEvent()响应所有对应事件名的事件

local event = cc.EventCustom:new("testEvent")

   event._myName = "I'm HemJohn"

eventDispatcher:dispatchEvent(event)

调用三次dispatchEvent结果如下:

转载请注明出处,from 博客园HemJohn

cocos2dx观察者模式EventListenerCustom的使用(代替NotificationCenter)的更多相关文章

  1. 【转】Cocos2d - 观察者模式NotificationCenter

    http://shahdza.blog.51cto.com/2410787/1611575 [唠叨] 观察者模式 也叫订阅/发布(Subscribe/Publish)模式,是 MVC( 模型-视图-控 ...

  2. cocos2d-x 源代码分析 : EventDispatcher、EventListener、Event 源代码分析 (新触摸机制,新的NotificationCenter机制)

    源代码版本号来自3.x,转载请注明 cocos2d-x 源代码分析总文件夹 http://blog.csdn.net/u011225840/article/details/31743129 1.继承结 ...

  3. cocos2d-x NotificationCenter

    转自:http://www.xinze.me/cocos2d-x-ccnotificationcenter/ 在前端开发中,JS和as3中都有很好的监听机制, 我们使用Event的addEventLi ...

  4. Cocos2d-x 3.x游戏开发之旅

    Cocos2d-x 3.x游戏开发之旅 钟迪龙 著   ISBN 978-7-121-24276-2 2014年10月出版 定价:79.00元 516页 16开 内容提要 <Cocos2d-x ...

  5. 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...

  6. cocos2dx 魔塔项目总结(一)

    <魔塔天城>发布已经有半年的时间了,一直想找时间来总结一下这个项目,但总是一拖再拖.如果再这么拖下去,就永远都不会有时间来写这个总结了,时间总是挤出来的. 魔塔天城使用的cocos2dx ...

  7. 整理Cocos2d-x 面试题解

    昨天听了腾讯2015校招的在线宣讲会,看到了游戏技术大拿Steven,他总结了需要的达人得爱技术,能坚持,够挑剔.马上校招了,加油吧,骚年~ 网上关于cocos2d-x的面试题比较少,这里搜集和整理了 ...

  8. cocos2dx+lua注册事件函数详解 事件

    coocs2dx 版本 3.1.1 registerScriptTouchHandler             注册触屏事件 registerScriptTapHandler             ...

  9. Cocos2d-x数据相关的类用法简介(附示例)

    (搬运自我在SegmentFault的博客) 在Cocos2d-x的学习和使用中,我遇到了很多关于数据的操作.在这个过程中,我学习了Cocos2d-x自带的很多功能.下面我把接触到的类罗列在下面,给出 ...

随机推荐

  1. JDK动态代理 Proxy InvocationHandler

  2. PAT甲级——1114 Family Property (并查集)

    此文章同步发布在我的CSDN上https://blog.csdn.net/weixin_44385565/article/details/89930332 1114 Family Property ( ...

  3. 页面出现滚动条时,body里面的内容不能自动居中?

    弹窗后允许页面滚动 这种方式通常使用 position: absolute; ,可以看看我做的这个 Demo.主要用来应对弹窗内容很大很多的情况,超过了屏幕的宽高需要产生滚动条来方便浏览者查看.有一些 ...

  4. 单例设计模式singleton

    简单引入 单例设计模式作为最简单,最常用的设计模式.一般是这两中写法,这两种写法教科书所谓的标准写法,但是实际上存在不少问题.后面介绍标准写法,以规避这些问题. 1.懒汉式: /** * 问题在于,当 ...

  5. airodump-ng 界面参数比较详细的解释

    BSSID: AP(access point)的MAC地址,,如果在client section中BSSID显示为"not associated" ,那么意味着该客户端没有和AP连 ...

  6. Spark Mllib里如何将数据取消暂存在内存中(图文详解)

    不多说,直接上干货! 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的第18章 决策树回归分类Bike Sharing数据集

  7. nuxt实践

    利用手脚架搭起来的服务端渲染实例目录结构.nuxtassets 未编译的静态资源如 LESS.SASS 或 JavaScriptcomponents 用于组织应用的 Vue.js 组件middlewa ...

  8. 《C#高效编程》读书笔记01-使用属性而不是可访问的数据成员

    在需求变更中,属性比数据成员更容易修改,例:客户对象不该与空白名称,若你使用公有属性封装Name,那么现在修改一处,而数据成员则可能要修改多处 public class Customer { priv ...

  9. nodejs 实践:express 最佳实践(六) express 自省获得所有的路由

    nodejs 实践:express 最佳实践(六) express 自省获得所有的路由 某些情况下,你需要知道你的应用有多少路由,这在 express 中没有方法可以.因此我这边曲线了一下,做成了一个 ...

  10. 5.类型、值和变量-JavaScript权威指南笔记

    开始变得有意思起来了,然而第三章还是以基础知识了解的角度阐释相关的概念,并没有深入到结合代码以及要实现的功能讲用法和原理的程度. 1.概论. value:程序的运行是对值的操作. type:能够表示并 ...