Cocos2d之用Lua实现类
Lua中的类
lua语言中实际上来说是没有类这个概念的,但是它也可以用自己的各种机制来实现类的效果。
从概念上来说,类有三大特性:封装性、继承性、多态性。lua有元表机制。
从结构上来说,类其实就是一个键值对的集合。lua有table可以满足。
lua的表查找键值对流程如下图所示:
所以,我们通过lua的table及它的元表机制,可以在lua中实现类。
实现Lua类
在Cocos2d中,自己做了一个class方法,来作为类的机制。 文件位置: [cocos\scripting\lua-bindings\script\cocos2d\functions.lua]
1 | function class(classname, ...) |
几个设定键:
- __cname : 类名
- __create : 初始化方法
- __supers : 父类集合
几个函数:
- ctor : 构造函数
- new : 初始化函数
- create : 初始化函数(对new的一个封装,为了使用方法同C++部分一致)
class方法:
- 设置类名
- 遍历传入的构造方法
- 若是 function类型,则设置为初始化方法
- 若是 table类型
- 若是 C++的类,设置初始化方法为调用原生类的create方法
- 若是 纯lua类,将自己添加到基类中
- 处理自己的元表
- ctor:必须要有
- new
- 获取instance值
- 设置instance元表index
- 若是 C++类,设置peer
(PS:peer是 tolua++提供的存储C++对象在Lua中的扩展) - 若是 纯lua类,设置元表
- 若是 C++类,设置peer
- 执行构造方法
- 返回instance
- create:对new的一个封装,为了使用方法同C++部分一致
- 处理构造函数、初始化函数的创建与封装
参考资料: