zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【EFCORE笔记】客户端与服务端求值&跟踪与非跟踪查询
    【EFCORE笔记】预先加载&显式加载&延迟加载
    【EFCORE笔记】在远程查询数据
    【EFCORE笔记】远程数据查询支持
    【EFCORE笔记】元素操作&集合运算&转换类型
    【EFCORE笔记】生成操作&相等比较&串联运算
    【EFCORE笔记】联接运算与数据分组
    【EFCORE笔记】投影运算与数据分区
    【EFCORE笔记】排序&集运算&筛选&限定
    【EFCORE笔记】团队环境中的迁移
  • 原文地址:https://www.cnblogs.com/HemJohn/p/4951048.html
Copyright © 2011-2022 走看看