在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
本文介绍Cocos2dx3.x中被弃用的旧事件机制,转而使用EventDispatcher来实现观察者模式。通过具体示例展示了如何在Lua脚本中创建事件监听器并触发事件。
&spm=1001.2101.3001.5002&articleId=97742781&d=1&t=3&u=5cb2b9f89e5840239097eb6398967597)
1082

被折叠的 条评论
为什么被折叠?



