[Unity热更新]tolua# & LuaFramework(三):lua使用list与事件委托
来源:互联网 发布:淘宝网开网店 编辑:程序博客网 时间:2024/04/28 04:57
1.在Assets\LuaFramework\Editor下有CustomSettings.cs,可以将c#类或者枚举注册到lua中,供lua调用
2.当在lua中调用c#的方法,提示参数错误时,可以到对应的wrap文件中看方法需要什么参数
3.当需要生成wrap文件时,不要忘了点击菜单栏Lua/Generate All;当修改了lua文件等资源后,不要忘了点击菜单栏LuaFramework/Build xxx Resource
4.list.lua
在框架中有一个list.lua,它是一个双向链表,即一个元素有两个指针,指向它的前一个元素和后一个元素。这里的元素指的是table,获取值的方式是:xxx.value
a.属性:长度length,指向第一个元素的first以及指向最后一个元素的last
b.方法:
clear():清空push(v):将v添加到list的最后pop:移除最后的元素,并获取它的值unshift(v):将v添加到list的最前shift():移除最前的元素,并获取它的值remove(iter):移除iter这个元素find(v, iter):从iter这个元素开始向后查找,如果找到值为v的,则返回那个元素。如果赋予iter为nil,则从list的第一个元素开始寻找。注意返回的是第一个符合条件的findlast(v, iter):与前面的相反,向前查找next(iter):返回iter的下一个元素,以及那个元素的值,多值返回items():return self.next, self。主要用于遍历(从前往后),例如:local t = list:New()for item in self.items() do t:push(item.value)endprev(iter):与next(iter)相反reverse_items():return self.prev, self。与items()相反erase(value):移除值为value的元素insert(v, iter):在iter后面插入值为v的元素head():返回第一个元素的值tail():返回最后一个元素的值clone():复制一个list
测试:
--TranScriptInfo.luaTranScriptInfo = {id = "0",areaName = "0",scriptName = "0",scriptIcon = "0",scriptTable = "0",scriptScene = "0"};TranScriptInfo.__index = TranScriptInfofunction TranScriptInfo:new(id,areaName,scriptName,scriptIcon,scriptTable,scriptScene)local o = {};setmetatable(o,self);o.id = id;o.areaName = areaName;o.scriptName = scriptName;o.scriptIcon = scriptIcon;o.scriptTable = scriptTable;o.scriptScene = scriptScene;return o;end
local list = require "list"require "TranScriptInfo"TranScriptInfoList = list:new();a = TranScriptInfo:new(1,"a1","a2","a3","a4","a5");b = TranScriptInfo:new(2,"b1","b2","b3","b4","b5");c = TranScriptInfo:new(3,"a1","c2","c3","c4","c5");TranScriptInfoList:push(a);TranScriptInfoList:push(b);TranScriptInfoList:push(c);--输出所有元素for item in TranScriptInfoList:items() dolocal v = item.value;print(v.id..v.areaName..v.scriptName..v.scriptIcon..v.scriptTable..v.scriptScene);endprint(" ");--输出指定值的元素for item in TranScriptInfoList:items() dolocal v = item.value;if(v.areaName == "a1") thenprint(v.id..v.areaName..v.scriptName..v.scriptIcon..v.scriptTable..v.scriptScene);endendprint(" ");--数字型forfunction a()local now = nil;for i = 1,TranScriptInfoList.length,1 donow = TranScriptInfoList:next(now);local v = now.value;print(v.id..v.areaName..v.scriptName..v.scriptIcon..v.scriptTable..v.scriptScene);--print(i);endenda();
5..委托与事件
1.lua使用“在c#中定义好的事件”
框架中有相关例子
2.lua使用“在lua中定义好的事件”
table操作(详细的可见:http://www.runoob.com/lua/lua-tables.html):
EventType = {Register = 0,Attack = 1}
EventCenter = {};function EventCenter.AddListener(eventType, func)if EventCenter[eventType] == nil thenlocal a = {};table.insert(a, func);EventCenter[eventType] = a;elsetable.insert(EventCenter[eventType], func);endendfunction EventCenter.RemoveListener(eventType, func)local a = EventCenter[eventType];if a ~= nil thenfor k, v in pairs(a) doif(v == func) then a[k] = nil; endendendendfunction EventCenter.Dispatch(eventType, ...)local a = EventCenter[eventType];for k, v in pairs(a) dov(...);endend
require "EventCenter"require "EventType"function Register1(name, password)print("the first function ", name, password);endfunction Register2(name, password)print("the second function ", name, password);endEventCenter.AddListener(EventType.Register, Register1);EventCenter.AddListener(EventType.Register, Register2);EventCenter.Dispatch(EventType.Register, "宏", "哥");EventCenter.RemoveListener(EventType.Register, Register2);EventCenter.Dispatch(EventType.Register, "tay");
3.UI事件
最好使用http://blog.csdn.net/lyh916/article/details/44570503中提供的EventTriggerListener.cs,将这个类和里面的UIDelegate进行注册就可以了,使用起来很方便:
0 0
- [Unity热更新]tolua# & LuaFramework(三):lua使用list与事件委托
- [Unity热更新]tolua# & LuaFramework(七):lua使用DOTween
- [Unity热更新]tolua# & LuaFramework(五):.proto转换为.lua
- [Unity热更新]tolua# & LuaFramework(一):基础
- [Unity热更新]tolua# & LuaFramework(十一):实践
- [Unity热更新]tolua# & LuaFramework(一):基础
- [Unity热更新]tolua# & LuaFramework(一):基础
- [Unity热更新]tolua# & LuaFramework(八):更新下载(上)
- [Unity热更新]tolua# & LuaFramework(十四):更新下载(中)
- [Unity热更新]tolua# & LuaFramework(十五):更新下载(下)
- [Unity热更新]tolua# & LuaFramework(二):打包工具
- [Unity热更新]tolua# & LuaFramework(四):读取数据
- [Unity热更新]tolua# & LuaFramework(六):网络通信
- [Unity热更新]tolua# & LuaFramework(九):网络通信实例
- [Unity热更新]tolua# & LuaFramework(十):扩展工具包
- [Unity热更新]tolua# & LuaFramework(十二):基础补充
- [Unity热更新]tolua# & LuaFramework(十三):导出apk
- ToLua LuaFramework 使用实战[1]-代码热更新
- Lua中rawset和rawget的使用方法
- 上拉加载XListView
- ArrayList and LinkedList Demo
- 5-10 计算工资 (15分)
- 【JQuery】使用each()方法遍历元素
- [Unity热更新]tolua# & LuaFramework(三):lua使用list与事件委托
- JAVA 抽象路径
- ios TCP协议的理解(基于Socket【套接字】)
- Linux安装Anaconda
- 命令行中的数据挖掘:怎么在比较大的训练集中提取小样本
- ccf 模板生成系统
- ListView的简单实用
- LVS 工作模式以及工作原理
- 红黑树和AVL树