在Lua中使用事件系统,进行事件的监听和派发,移除

在Lua中用事件有2中方式:
1.用C#定义好的事件系统,在Lua层调用,我也写过一https://blog.csdn.net/baidu_39447417/article/details/79764962

2.在Lua层定义事件系统,代码如下

EventSystem={}
--添加事件 eventType-->事件类型  func-->方法
function EventSystem.AddListener(eventType,func)
    if(eventType==nil or func==nil)then
        log('在EventSystem.AddListener中eventType或func为空')
        return
    end
    if(EventSystem[eventType]==nil)then
        local a={}
        table.insert(a,func)
        EventSystem[eventType]=a
    else
        table.insert(EventSystem[eventType],func)
    end
end
--移除事件
function EventSystem.RemoveListener(eventType,func)
    if(eventType==nil or func==nil)then
        log('在EventSystem.RemoveListener中eventType或func为空')
        return
    end
    local a=EventSystem[eventType]
    if(a~=nil)then
        for k,v in pairs(a) do
            if(v==func)then
                a[k]=nil
            end
        end
    end
end

--派发事件
function EventSystem.SendEvent(eventType,...)
    if(eventType~=nil)then
        local a=EventSystem[eventType]
        if(a~=nil)then
            for k,v in pairs(a) do
                v(...)
            end
        end
    end
end

return EventSystem

一定要注意事件有监听就必须要有移除监听

你可能感兴趣的:(Lua)