cocos2dx观察者模式EventListenerCustom的使用(代替NotificationCenter)

在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

转载于:https://www.cnblogs.com/HemJohn/p/4951048.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值