在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

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

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值