找回密码
 注册帐号

扫一扫,访问微社区

网虫虫 Lua中的消息分发实现

4
回复
689
查看
[ 复制链接 ]
排名
1761
昨日变化

40

主题

202

帖子

2073

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
14
蛮牛币
2634
威望
0
注册时间
2016-10-28
在线时间
813 小时
最后登录
2019-4-24

专栏作家

2018-10-25 11:27:20 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
Lua中的消息分发和C#实现的比较类似,使用很方便。
这个是C#的教程地址:http://www.u3d8.com/?p=1298
上代码:
LuaEvent类:
[AppleScript] 纯文本查看 复制代码
LuaEvent = class("LuaEvent");
 
function LuaEvent.ctor(self, eventId)
    self.eventId = eventId;
    self.observers = {};
end
 
function LuaEvent:Dispatch(...)
    for _, v in pairs(self.observers) do
        if v.target ~= nil then
            v.handler(v.target, ...);
        else
            v.handler(...);
        end
    end
end
 
function LuaEvent:AddListener(target, handler)
    local observer = {};
    observer.target = target;
    observer.handler = handler;
    table.insert(self.observers, observer);
end
 
function LuaEvent:RemoveListener(target, handler)
    for k, v in pairs(self.observers) do
        if v.target == target and v.handler == handler then
            self.observers[k] = nil
            return k
        end
    end
end

LuaEventMgr管理类:
[AppleScript] 纯文本查看 复制代码
LuaEventMgr = class("LuaEventMgr");
 
local events = {}
 
 
function LuaEventMgr.AddListener(target, event, handler)
    if not event or type(event) ~= "string" then
        error("event parameter in addlistener function has to be string, " .. type(event) .. " not right.")
    end
    if not handler or type(handler) ~= "function" then
        error("handler parameter in addlistener function has to be function, " .. type(handler) .. " not right")
    end
 
    if not events[event] then
        events[event] = LuaEvent.New(event)
    end
 
    events[event]:AddListener(target, handler);
end
 
function LuaEventMgr.RemoveListener(target, event, handler)
    if event == nil then
        Debug.LogError("event param is nil, please check it");
        return;
    end
    if not events[event] then
        Debug.LogWarning("remove " .. event .. " has no event.")
    else
        events[event]:RemoveListener(target, handler)
    end
end
 
function LuaEventMgr.Dispatch(event,...)
    if events[event] then
        events[event]:Dispatch(...)
    end
end

LuaEventType:
[AppleScript] 纯文本查看 复制代码
LuaEventType =
{
    Test                       = "Test";
}

测试代码:
[AppleScript] 纯文本查看 复制代码
function UIEventController:OnAddLuaClick()
    LuaEventMgr.AddListener(self, LuaEventType.Test, self.OnLuaTestEvent);
end
 
function UIEventController:OnRemoveLuaClick()
    LuaEventMgr.RemoveListener(self, LuaEventType.Test, self.OnLuaTestEvent);
end
 
function UIEventController:OnDispatchLuaClick()
    LuaEventMgr.Dispatch(LuaEventType.Test, "这是发送一个Lua事件")
end
 
function UIEventController:OnLuaTestEvent(evtData)
    print("接收到Lua事件内容:"..evtData);
end


回复

使用道具 举报

7日久生情
4006/5000
排名
143
昨日变化

0

主题

370

帖子

4006

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
2484
好友
2
蛮牛币
4026
威望
0
注册时间
2013-8-23
在线时间
1298 小时
最后登录
2019-4-26
2018-10-26 13:47:39 显示全部楼层
灰常不错!最近一直在搞lua,借鉴一下
回复 支持 反对

使用道具 举报

排名
332
昨日变化

77

主题

648

帖子

3908

积分

Rank: 9Rank: 9Rank: 9

UID
93357
好友
6
蛮牛币
19669
威望
0
注册时间
2015-4-18
在线时间
1334 小时
最后登录
2019-4-26

专栏作家认证开发者

QQ
2018-10-26 14:20:24 显示全部楼层
这是普通的lua? 还是XLua? 还是ULua?
最近想学Lua,但是学的东西太多了
回复 支持 反对

使用道具 举报

排名
1761
昨日变化

40

主题

202

帖子

2073

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
14
蛮牛币
2634
威望
0
注册时间
2016-10-28
在线时间
813 小时
最后登录
2019-4-24

专栏作家

楼主 2018-10-26 14:31:45 显示全部楼层
gxguixin123 发表于 2018-10-26 14:20
这是普通的lua? 还是XLua? 还是ULua?
最近想学Lua,但是学的东西太多了

xlua
回复 支持 反对

使用道具 举报

排名
1761
昨日变化

40

主题

202

帖子

2073

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
14
蛮牛币
2634
威望
0
注册时间
2016-10-28
在线时间
813 小时
最后登录
2019-4-24

专栏作家

楼主 2018-10-26 14:31:55 显示全部楼层
gxguixin123 发表于 2018-10-26 14:20
这是普通的lua? 还是XLua? 还是ULua?
最近想学Lua,但是学的东西太多了

xlua
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则