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

欢迎加入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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值