加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[cocos2dx_lua]Lua版自定义事件分发系统

发布时间:2020-12-14 17:24:45 所属栏目:百科 来源:网络整理
导读:--事件系统----------------------------------local EventSystem = class("EventSystem")function EventSystem:ctor() self._eventBus = {}end-- _eventBus[eventName][tag] = listenerfunction EventSystem:regEvent(eventName,listener,tag) print(eventN


--事件系统
----------------------------------
local EventSystem = class("EventSystem")
function EventSystem:ctor()
    self._eventBus = {}
end

-- _eventBus[eventName][tag] = listener
function EventSystem:regEvent(eventName,listener,tag)
    print(eventName,tag)
    if type(eventName) == "string" and type(listener) == "function" then
        if not self._eventBus[eventName] then self._eventBus[eventName] = {} end
        tag = tag .. ''
        self._eventBus[eventName][tag] = listener
        printf("[[通知中心 %s 注册 %s 成功! ]]",eventName,tag)
    else
        printf("[[通知中心 %s 注册 %s 失败! ]]",tostring(eventName),tag .. '')
    end
end


function EventSystem:postEvent(eventName,data)
    assert(eventName,"EventSystem:postEvent eventName = nil")
    local target = self._eventBus[eventName]
    if not target then printf("[[通知中心 %s 不存在! ]]",eventName) return end

    local event = { eventName = eventName,tag = nil,data = data }
    if target then
        for _tag,v in pairs(target) do
            printf("[[通知中心 向 %s 发送 %s 成功! ]]",_tag,event.eventName)
            event.tag = _tag
            v( event )
        end
    end
end

function EventSystem:unRegEvent(eventName,tag)
    if self._eventBus[eventName] then
        tag = tag .. ''
        self._eventBus[eventName][tag] = nil
        printf("[[通知中心 %s 注销 %s 成功! ]]",tag)
    else
        printf("[[通知中心 %s 注销 %s 失败! ]]",tag)
    end
end

function EventSystem:unRegEventByName(eventName)
    if self._eventBus[eventName] then
        self._eventBus[eventName] = nil
        printf("[[通知中心 %s 注销成功! ]]",eventName)
    else
        printf("[[通知中心 %s 注销失败! ]]",eventName)
    end
end


function EventSystem:hasEventListenerByName(eventName)
    local t = self._eventBus[eventName]
    if not t then return false end
    for _,__ in pairs(t) do
        return true
    end
    return false
end

function EventSystem:hasEventListener(eventName,tag)
    return (not self._eventBus[eventName][tag .. ''])
end

function EventSystem:removeAllEventListeners()
    self._eventBus = {}
end

function EventSystem:dumpAllEventListeners()
    print("---- EventSystem:dumpAllEventListeners() ----begin")
    for name,listeners in pairs(self._eventBus) do
        printf("-- event: %s",name)
        for tag,listener in pairs(listeners) do
            printf("--     tag: %s,listener: %s",tostring(tag),tostring(listener))
        end
    end
    print("---- EventSystem:dumpAllEventListeners() ----end")
end

return EventSystem

[设计模式]Observer观察者模式

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读