1.在Assets\LuaFramework\Editor下有CustomSettings.cs,可以将c#类或者枚举注册到lua中,供lua调用
2.当在lua中调用c#的方法,提示参数错误时,可以到对应的wrap文件中看方法需要什么参数
3.当修改了框架中的c#代码后,不要忘了点击菜单栏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) end prev(iter):与next(iter)相反 reverse_items():return self.prev, self。与items()相反 erase(value):移除值为value的元素 insert(v, iter):在iter后面插入值为v的元素 head():返回第一个元素的值 tail():返回最后一个元素的值 clone():复制一个list
测试:
--TranScriptInfo.lua TranScriptInfo = { id = "0", areaName = "0", scriptName = "0", scriptIcon = "0", scriptTable = "0", scriptScene = "0" }; TranScriptInfo.__index = TranScriptInfo function 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() do local v = item.value; print(v.id..v.areaName..v.scriptName..v.scriptIcon..v.scriptTable..v.scriptScene); end print(" "); --输出指定值的元素 for item in TranScriptInfoList:items() do local v = item.value; if(v.areaName == "a1") then print(v.id..v.areaName..v.scriptName..v.scriptIcon..v.scriptTable..v.scriptScene); end end print(" "); --数字型for function a() local now = nil; for i = 1,TranScriptInfoList.length,1 do now = TranScriptInfoList:next(now); local v = now.value; print(v.id..v.areaName..v.scriptName..v.scriptIcon..v.scriptTable..v.scriptScene); --print(i); end end a();
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 then local a = {}; table.insert(a, func); EventCenter[eventType] = a; else table.insert(EventCenter[eventType], func); end end function EventCenter.RemoveListener(eventType, func) local a = EventCenter[eventType]; if a ~= nil then for k, v in pairs(a) do if(v == func) then a[k] = nil; end end end end function EventCenter.Dispatch(eventType, ...) local a = EventCenter[eventType]; for k, v in pairs(a) do v(...); end end
require "EventCenter" require "EventType" function Register1(name, password) print("the first function ", name, password); end function Register2(name, password) print("the second function ", name, password); end EventCenter.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进行注册就可以了,使用起来很方便: