看quick sample mvc 代码 有
doEvent
dispatchEvent
这俩函数有什么区别 我知道doEvent 会执行传入event name 会执行相应的callback
self:dispatchEvent({name = Actor.FIRE_EVENT})
dispatchEvent 这个函数是什么意思 dispatchEvent doEvent 有什么区别
看quick sample mvc 代码 有
doEvent
dispatchEvent
这俩函数有什么区别 我知道doEvent 会执行传入event name 会执行相应的callback
self:dispatchEvent({name = Actor.FIRE_EVENT})
dispatchEvent 这个函数是什么意思 dispatchEvent doEvent 有什么区别
UP UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
=====================================================================================
function ModelBase:ctor(properties)
cc(self):addComponent(“components.behavior.EventProtocol”):exportMethods()
self.isModelBase_ = true
if type(properties) ~= "table" then properties = {} end
self:setProperties(properties)
end
=====================================================================================
function EventProtocol:dispatchEvent(event)
event.name = string.upper(tostring(event.name))
local eventName = event.name
if DEBUG > 1 then
printInfo("%s dispatchEvent() - event %s", tostring(self.target_), eventName)
end
if self.listeners_ == nil then return end
event.target = self.target_
event.stop_ = false
event.stop = function(self)
self.stop_ = true
end
for handle, listener in pairs(self.listeners_) do
if DEBUG > 1 then
printInfo("%s dispatchEvent() - dispatching event %s to listener %s", tostring(self.target_), eventName, handle)
end
-- listener = listener
-- listener = tag
event.tag = listener
listener(event)
if event.stop_ then
if DEBUG > 1 then
printInfo("%s dispatchEvent() - break dispatching for event %s", tostring(self.target_), eventName)
end
break
end
end
return self.target_
end
=====================================================================================
Actor是继承ModelBase
由ModelBase:ctor可以看到他增加了EventProtocol的函数
Actor实际调用的是EventProtocol的dispatchEvent
可以看出他会去寻找所有监听事件为eventName的listener
然后派发事件 listener(event)
其他地方只要注册了eventName的都能收到派发出来的事件
mvc可能只是一个例子,里面并有有监听任何eventName
所以dispatchEvent只是派发了一个空函数需要自己去完善实现
关于doEvent是正对于状态机的,dispatchEvent是对于事件处理的
一个是告诉状态机改状态,一个是派发监听器事件
这是我的理解,如果没有说明文档,真相只有一句话:reading the fuck source code