游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

开发者专栏

关注:2353

当前位置:游戏蛮牛 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 257|回复: 4

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

[复制链接]  [移动端链接]
排名
1828
昨日变化
1

38

主题

180

帖子

1949

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
14
蛮牛币
2869
威望
0
注册时间
2016-10-28
在线时间
767 小时
最后登录
2018-11-14

专栏作家

发表于 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日久生情
3715/5000
排名
175
昨日变化

0

主题

365

帖子

3715

积分

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

UID
2484
好友
2
蛮牛币
3633
威望
0
注册时间
2013-8-23
在线时间
1195 小时
最后登录
2018-11-16
发表于 2018-10-26 13:47:39 | 显示全部楼层
灰常不错!最近一直在搞lua,借鉴一下

回复 支持 反对

使用道具 举报

排名
394
昨日变化
2

73

主题

597

帖子

3487

积分

Rank: 9Rank: 9Rank: 9

UID
93357
好友
6
蛮牛币
10260
威望
0
注册时间
2015-4-18
在线时间
1163 小时
最后登录
2018-11-16

专栏作家认证开发者

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

回复 支持 反对

使用道具 举报

排名
1828
昨日变化
1

38

主题

180

帖子

1949

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
14
蛮牛币
2869
威望
0
注册时间
2016-10-28
在线时间
767 小时
最后登录
2018-11-14

专栏作家

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

xlua

回复 支持 反对

使用道具 举报

排名
1828
昨日变化
1

38

主题

180

帖子

1949

积分

Rank: 9Rank: 9Rank: 9

UID
178893
好友
14
蛮牛币
2869
威望
0
注册时间
2016-10-28
在线时间
767 小时
最后登录
2018-11-14

专栏作家

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

xlua

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐 上一条 /1 下一条

快速回复 返回顶部 返回列表