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)
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进行注册就可以了,使用起来很方便: