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
继承之后的问题
function Teacher:ctor() print("Teacher construct") end
function Teacher:ctor()
self.super:ctor() -- self不要忘记
-- TODO 子类自己的构造函数的逻辑代码
end
对于其它的成员方法,也是如此。 ======== (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |