Lua面向对象编程
来源:互联网 发布:网络功放系统 编辑:程序博客网 时间:2024/05/05 06:29
很多游戏都开始使用lua脚本了。以我来说,我刚工作时Lua脚本还只是大量的用在UI上,UI对面向对象编程还没有那么大的诉求,只是很脏的业务逻辑。之后开发的游戏已经完全让Lua来处理游戏逻辑了,这也是各种热更的需要,这时对面向对象的需求就大大增加了,比如游戏中有上百个NPC我们不能为每一个NPC都写一套逻辑,那简直就是噩梦,简直比喝一箱白花蛇草水还要caodan。还要借助oo思想,为所有NPC搞个基。搞个基类。好言归正传,下面就讲解一下如何用Lua来写oo。
首先,要了解一下在Lua中oo实现的基础--table(没错,就是table,也是Lua的精髓),metatable(就是一个隐形table,能用setmetatable()设置,用getmetatable()取得),__index(metatable的一个key)。
这三者的关系是这样的:以索引一个tab中的值(index)为例,当tab[index] 时,先去tab中查找这个key,如果有则返回tab[index],如果没有则查找有没有metatable,没有则返回nil,有则查找metatable中有没有__index这个键,没有返回nil,有则在__index中查找。
所以__index是一个表,且__index是metatable表中的一个元素,metaltable表可以用setmetatable()附加给一个表。
所以,我们可以试着写一个类
classA =
{
a = 0,
b = 0,
new = function(self,varA,varB) 构造函数
-- body
self.a = varA
self.b = varB
print("classA struction!")
local tab = {}
setmetatable(tab,self)
return tab
end,
}
classA.__index = classA --这句话的原因是因为setmetatable时 classA是metatable 所以他必須有一个__index
local test = classA:new(1,2)
print(test.a,test.b)
//输出结果是1,2
这样看起来跟c++中的不一样,我们可以换一种写法:
classA =
{
a = 0,
b = 0,
}
function classA:new(varA,varB) --用“:”默认传递self
-- body
self.a = varA
self.b = varB
print("classA struction!")
local tab = {}
setmetatable(tab,self)
return tab
end,
classA.__index = classA
local test = classA:new(1,2)
print(test.a,test.b)
//输出结果一样- lua 面向对象编程
- lua 面向对象编程
- Lua面向对象编程
- Lua面向对象编程
- Lua中的面向对象编程
- lua中的面向对象编程
- Lua中的面向对象编程
- Lua中的面向对象编程
- lua 的面向对象化编程
- COCOS2D-X Lua面向对象编程
- COCOS2D-X Lua 面向对象编程
- 基于closure的lua面向对象编程
- COCOS2D-X Lua 面向对象编程
- COCOS2D-X Lua面向对象编程
- Lua学习之6:面向对象编程
- lua语言实现面向对象编程
- Lua 基础之面向对象编程
- 【ulua入门】lua实现面向对象编程
- selenium一个具体页面的实现(结合autoit3和sikuli)
- 解决低版本ie中文乱码 urlencode urldecode
- 关于reverse_iterator
- Window7系统64位下安装Oracle 10g出错解决办法
- Android--view自定义--圆环等待
- Lua面向对象编程
- C++ 中关于默认构造函数的一点困惑
- Xshell连接虚拟机时,提示SSH服务器拒绝了密码
- hibernate
- 《——————————搭建自己的网站————————————》
- 如何系统学习大数据(转自知乎)
- C++中的小错误
- Css基本样式(二)
- layoutSubviews何时调用的问题