• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Cocos2d-x教程 Lua脚本(3) Lua中如何创建"类"与"对象" ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

欢迎加入Cocos2d-x 交流群:193411763

源码下载地址:http://download.csdn.net/detail/u012945598/6692125 .lua文件在Resouces文件夹下,名为test.lua

Lua是一门面向过程的语言,并没有面向对象语言中的"类"的概念,但是我们可以通过Lua中的”Metatable(元表)“来模拟一个”类“,关键在于__index这个域,他提供了表的索引入口。

元表也是一个表,Lua语言中定义了很多重定义 table类型操作的入口,他们都是以双下划线”__“开头的,例如__index,__add,当你为一个值设定了Metatable,并且重写了其操作入口,在这个值执行这个操作的时候就会触发重写的自定义操作。具体的说, Lua每种类型的值都有都有他的默认操作方式,,数字可以做加减乘除等操作,字符串可以做连接操作,函数可以做调用操作,表可以做表项的取值赋值操作.他们都遵循这些操作的默认逻辑执行,而这些操作可以通过Metatable来改变.

Metatable中定义的操作add, sub, mul, div, mod, pow, unm, concat, len, eq, lt, le, tostring, gc, index, newindex, call...

__index是什么?举个例子来说,当我们访问一个表中的元素不存在时,则会触发去寻找__index元方法。例如我们要索引一个值如table[key],Lua会首先在table本身中查找key的值,如果没有并且这个table存在一个带有__index属性的metatable,则Lua会按照_index所定义的函数逻辑查找。
下面我们来做一个Demo,创建一个基于Lua的工程,新建一个.lua文本,在文本中写入如下代码:


在上述代码中,我们相当于是定义了一个”类“table,为table定义了一个构造体(注意构造体中的self已经被初始化。正常情况下,谁调用new,self就代表谁),当我们创建对象的时候便可以通过table:new(x,y)方法创建,现在table中共有四个属性,我们再为table类添加两个方法:


下面我们创建两个对象:


我们利用table的构造方法创建了两个变量,通过对象来测试是否能够访问到table中的属性和方法,打印结果如下:


两个对象之间互不影响,都成功访问了类中的属性和方法。

还有一点需要注意的就是,在Lua中的约定调用方法的的时候使用”: “,访问属性的时候使用". "

self表示一项操作所作用的“接受者”

定义一个函数:

function table:test() 等价于 function Class.test(self)
创建一个对象:

object=table:new(10,20) 等价于 object=table.new(self,10,20)

调用一个函数:

object:test() 等价于 object.test(object)


下图为Xcode中 .lua文件的的完整截图:




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Mac OS X 上Lua的安装方法发布时间:2022-07-22
下一篇:
nginx-upstream-bio/nio/netty-zuul2-apigateway-openresty-orange-lua-docker用API网 ...发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap