项目后期Lua接入笔记06--按钮事件监听及消息分发
2017-03-30 20:31
603 查看
按钮事件监听NGUI一般常用的是UIEvenetListener,使用方法一般如下
在Lua代码中使用方式也差不多
对于消息分发,Lua里面有一个Event实现了类似的功能,但是我们的需求不只是lua内部分发,还涉及到其他未改成lua的脚本,所以我们使用自己游戏框架内的消息机制, 基础原理可以参看以前的文章
那么在Lua中使用,该怎么使用,这里需要进行一些修改。
定义一个字典,存储当前的lua回调
然后再写一份对于lua调用的消息机制
这里主要的代码是lua发过来的信息,有多个参数,而c#里面的消息数据做了泛型约束,查看API代码发现了这个函数,正好满足我们的需求。
写好后将此类wrap给lua使用,lua中调用代码如下
UIEventListener.Get(gameObject).onClick = BtnClick;
在Lua代码中使用方式也差不多
UIEventListener.Get(gameObject).onClick = this.BtnClick;
对于消息分发,Lua里面有一个Event实现了类似的功能,但是我们的需求不只是lua内部分发,还涉及到其他未改成lua的脚本,所以我们使用自己游戏框架内的消息机制, 基础原理可以参看以前的文章
那么在Lua中使用,该怎么使用,这里需要进行一些修改。
定义一个字典,存储当前的lua回调
static public Dictionary<int, List<LuaFunction>> luaEventTable = new Dictionary<int, List<LuaFunction>>();
然后再写一份对于lua调用的消息机制
static public void LuaAddListener(int eventType, LuaFunction lf) { if (luaEventTable.ContainsKey(eventType)) { luaEventTable[eventType].Add(lf); } else { List<LuaFunction> list = new List<LuaFunction>(); list.Add(LuaFunction); luaEventTable.Add(eventType, list); } } static public void LuaRemoveListener(int eventType, LuaFunction lf) { if (luaEventTable.ContainsKey(eventType)) { if (luaEventTable[eventType].Contains(lf)) { luaEventTable[eventType].Remove(lf); } } } static public void LuaBroadcast(int eventType, params object[] obj) { Broadcast2Lua(eventType, obj); Delegate d; if (eventTable.TryGetValue(eventType, out d)) { d.DynamicInvoke(obj); } } static private void Broadcast2Lua(int eventType, params object[] obj) { List<LuaFunction > list = null; if (luaEventTable.TryGetValue(eventType, out list)) { for (int j = 0; j < list.Count; j++) { list[j].Call(obj); } } }
这里主要的代码是lua发过来的信息,有多个参数,而c#里面的消息数据做了泛型约束,查看API代码发现了这个函数,正好满足我们的需求。
d.DynamicInvoke(obj);
写好后将此类wrap给lua使用,lua中调用代码如下
Messege.LuaAddListener(MessageID.LuaTest, this.Test); Messege.LuaRemoveListener(MessageID.LuaTest, this.Test); Messege.LuaBroadcast(MessageID.LuaTest, arg1,arg2,arg3);
相关文章推荐
- 项目后期Lua接入笔记03--LuaBehaviour设计
- 项目后期Lua接入笔记02--框架剥离
- 项目后期Lua接入笔记05--网络协议protobuf在lua中的使用pbc
- 项目后期Lua接入笔记08--Lua面向对象及LuaBehaviour的再设计
- 项目后期Lua接入笔记04--宏定义处理HelloWorld
- 项目后期Lua接入笔记10--Lua代码优化1
- 项目后期Lua接入笔记09--策划Excel转Lua
- 项目后期Lua接入笔记01--框架及IDE
- 项目后期Lua接入笔记07--预制属性转lua代码
- 项目后期Lua接入笔记11--Lua代码优化2
- Quick cocos2dx-Lua(V3.3R1)学习笔记(8) ---- 事件篇之单点触摸事件,让我们用精灵模仿一个按钮吧
- 移动项目开发笔记(禁止一个按钮在服务器事件处理完成前连续点击按钮)
- iOS项目开发实战——监听对话框的按钮点击事件
- 消息事件的监听与分发
- cocos-lua学习笔记(十一)事件分发机制
- java在线聊天项目0.3版本 制作客户端窗体,实现发送按钮和回车发送信息功能,使用ActionListener监听事件中actionPerformed方法(用内部类和匿名内部类两种方法)
- 【Android】06、监听按钮点击事件
- 项目实战:浅谈属性动画(2)-动画监听事件,消失的按钮,酷炫Path2.0
- Quick cocos2dx-Lua(V3.3R1)学习笔记(九) ---- 事件篇之单点触摸事件,让我们用精灵模仿一个按钮吧
- cocos2dx3.13 lua注册、分发监听真机切到后台事件