lua学习直通车
项目中使用的是LuaFramework框架,也就是tolua
用C#的思路使用lua
1.单例类:创建一个lua脚本,TestSingle.lua
--[[------------------------------------------------]]--
TestSingle = {}
--定义一个名为name的变量
TestSingle.name = "test"
--age
TestSingle.age = 15
--公有变量,在引用了TestSingle之后就可以直接使用此变量
publicName = "公有变量"
--私有变量,只能在lua脚本内调用
local privateName = nil
function TestSingle.Instance(obj)
TestSingle.para = "添加的新变量"
--调用PrivateFunc方法
PrivateFunc()
--私有变量赋值
privateName = "私有变量"
print("单例类,并返回该类")
return TestSingle
end
--在引用了TestSingle之后就可以直接调用次方法
function Func()
print("直接调用的方法Func")
end
--TestSingle中的Func方法,可以理解为静态的公有方法
function TestSingle.Func()
--定义一个局部变量,方法执行完后释放变量
local temp = "局部变量"
print("这是"..temp)
print("运行了TestSingle.Func方法")
end
--TestSingl才可以调用的方法
local function PrivateFunc()
print("只能在lua脚本内调用的方法====>PrivateFunc")
end
return TestSingle
--[[------------------------------------------------]]--
解释:
使用lua类需要引用require(“TestSingle”)
调用test = TestSingle.Instance()返回单例类对象
或者test = require("TestSingle")
可是直接test.name使用name变量
可以直接test.Func()调用方法
如果在其他脚本里同样使用单例类,它们公用相同的对象和方法,如test2 = TestSingle.Instance()
使用test2修改了变量,则test中的变量也被修改
2.对象:创建一个lua脚本,TestObject.lua
--[[------------------------------------------------]]--
TestObject = {}
--定义一个名为version的变量,这个变量是类和对象共用的,相当于静态变量
TestObject.version = "1.0"
function TestObject:New(name)
--需要新建一个table
local o = {}
--关联o和TestObject
setmetatable(o, self)
--设置原方法为TestObject
self.__index = self
--为对象添加变量name并赋值
o.name = name
--返回对象
return o
end
function TestObject:GetName()
print("这个对象的name是:"..self.name)
end
--TestObject中的Func方法,
function TestObject.Func()
print("TestObject.Func方法")
end
--可以理解为静态的私有方法
function PrivateFunc()
print("只能在lua脚本内调用的方法====>PrivateFunc")
end
return TestObject
--[[------------------------------------------------]]--
解释:
创建对象必须要有这三部,局部变量、元表、设置原方法,然后返回该对象
local o = {}
setmetatable(o, self)
TestObject self.__index = self
__index的作用:外部访问对象的变量如果不存在,则去元表中寻找
设置对象的变量需要使用o来创建变量,如o.index = 14,如果使用TestObject创建变量,则属于TestObject的变量,TestObject作为对象只有一个,可理解成静态