1.如果使用Lua编写面向对象的程序需要导入一个文件叫做extern.lua
function clone(object)
local lookup_table = {}
local function _copy(object)
if type(object) ~= "table" then
return object
elseif lookup_table[object] then
return lookup_table[object]
end
local new_table = {}
lookup_table[object] = new_table
for key, value in pairs(object) do
new_table[_copy(key)] = _copy(value)
end
return setmetatable(new_table, getmetatable(object))
end
return _copy(object)
end
--Create an class.
function class(classname, super)
local superType = type(super)
local cls
if superType ~= "function" and superType ~= "table" then
superType = nil
super = nil
end
if superType == "function" or (super and super.__ctype == 1) then
-- inherited from native C++ Object
cls = {}
if superType == "table" then
-- copy fields from super
for k,v in pairs(super) do cls[k] = v end
cls.__create = super.__create
cls.super = super
else
cls.__create = super
end
cls.ctor = function() end
cls.__cname = classname
cls.__ctype = 1
function cls.new(...)
local instance = cls.__create(...)
print("super type = "..superType)
print("classname is "..classname)
-- copy fields from class to native object
for k,v in pairs(cls) do
print("k="..k)
instance[k] = v
end
instance.class = cls
instance:ctor(...)
return instance
end
else
-- inherited from Lua Object
if super then
cls = clone(super)
cls.super = super
else
cls = {ctor = function() end}
end
cls.__cname = classname
cls.__ctype = 2 -- lua
cls.__index = cls
function cls.new(...)
local instance = setmetatable({}, cls)
instance.class = cls
instance:ctor(...)
return instance
end
end
return cls
end
function schedule(node, callback, delay)
local delay = CCDelayTime:create(delay)
local callfunc = CCCallFunc:create(callback)
local sequence = CCSequence:createWithTwoActions(delay, callfunc)
local action = CCRepeatForever:create(sequence)
node:runAction(action)
return action
end
function performWithDelay(node, callback, delay)
local delay = CCDelayTime:create(delay)
local callfunc = CCCallFunc:create(callback)
local sequence = CCSequence:createWithTwoActions(delay, callfunc)
node:runAction(sequence)
return sequence
end
2.创建一个类 testClass.lua
require "extern"
Student=class("Student")
function Student:ctor(...)
self.sno = nil --学号
self.name = nil --姓名
self.sex = nil --性别
end
function Student:setSno(sno)
if sno ~= nil then
self.sno=sno
end
end
function Student:getSno()
return self.sno
end
function Student:setName(name)
if name ~= nil then
self.name=name
end
end
function Student:getName()
return self.name
end
function Student:setSex(sex)
if sex ~= nil then
self.sex=sex
end
end
function Student:getSex()
return self.sex
end
function Student:print()
print ("sno is :"..self:getSno().."\tsname is :"..self:getName().."\tsSex is:"..self:getSex())
end
3 把类实例化对象
require "testClass"
student=Student.new()
student:setSno("1")
student:setName("Night");
student:setSex("Male")
student:print()