cocos2d-x lua tolua++ 面向对象
cocos2d-x lua 中集成了tolua++,所以在cocos2d-x lua实际开发中,可以直接用利用其面向对象特性,包括 封装 和 继承,无多态
类实例
User.lua
local User = class("User")
User.id = 1
User.name = "张三"
User.age = 20
function User:ctor() --构造方法
print("User construct")
end
function User:fun()
printf("a method of User")
end
function User:setId(id)
self.id = id
end
return User
test.lua
local User = require("User")
local u1 = User.new()
u1:fun()
一些注意问题
* 定义类
local User = class("User")
return User
注意一定要return , 直接按照要求定义一个类就行了
* lua类 不支持 函数重载
* 构造函数
function User:ctor() --构造方法
print("User construct")
end
类:ctor() , 也可以用带参数的构造函数
如果定义了多个构造函数,则之后调用最后加载的那个构造函数,因为没有函数重载,自然也不会有多个构造函数
* 成员方法,成员变量
用 类:(冒号)函数名 能定义一个成员方法 ,如下
function User:fun()
printf("a method of User")
end
如果定义如下,则其不是一个成员方法,可以供其他成员方法使用
local function fun()
end
对于成员变量 直接是self.成员变量,如下是对静态成员的设置
function User:setId(id)
self.id = id
end
如果改成
function User:setId(id)
User.id = id
end
那么 id会成为 一个类似C++中的静态成员,即所有的对象都有这么一个Id(同一块内存空间)
* 使用冒号(:) 和 点(.) 的区别和注意点
冒号(:) 相当于有一个self,能对成员方法访问
点(.) 相当于访问静态方法一样,没有self
这个问题,在初学时经常会犯错, 类似如下的这种错误,可能就需要好好检查下代码了
lua类继承(单继承)
Teacher.lua
local User = require("User")
local Teacher = class("Teacher", User)
return Teacher
如上,Teacher 类 继承 User类
比如在 cocos2d-x lua中,见到的MainScene,就继承了场景类,这样它就是个场景了
local MainScene = class("MainScene", function()
return display.newScene("MainScene")
end)
-- TODO...
return MainScene
继承之后的问题
构造函数,如果不写,这会调用父类的构造函数
若写法如下, 则子类构造方法 覆盖了 父类的构造方法,即Teacher.new()不会调用父类的构造函数
function Teacher:ctor()
print("Teacher construct")
end
- 如要使用父类的构造函数,写法如下
function Teacher:ctor()
self.super:ctor() -- self不要忘记
-- TODO 子类自己的构造函数的逻辑代码
end
对于其它的成员方法,也是如此。
当然子类可以 调用父类的成员变量和方法
========
cocos2dx3.0 lua c++交互
开发环境: VS2013 cocos2dx3.0 lua
参考图书 《Cocos2d-x 3.x游戏开发之旅》
” 项目 → 属性 → 配置属性 → 链接器 → 输入 → 附加依赖项 ” 中加入 lua51.lib
” 项目 → 属性 → 配置属性 → C/C++ → 附加包含目录 ” 中进行了相关包含
生成解决方案提示:无法打开文件 “lua51.lib”
可以下载响应的lib 或者从自己的lua安装目录中找到lua51.lib dll等相关文件
复制到 程序运行后产生的Debug.win32文件夹下
具体交互实现,可以自己阅读图书或参考下面博文,基本没有问题
http://www.cnblogs.com/sevenyuan/p/4511808.html
注意:lua调用C++时,C++函数要是静态函数
包括:如何取得普通变量,table变量, C++调用lua函数, lua调用C++函数