在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
欢迎加入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所定义的函数逻辑查找。 在上述代码中,我们相当于是定义了一个”类“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文件的的完整截图: |
请发表评论