cocos2dx-lua function.lua 定義了class方法,讓lua實現繼承像傳統語言一樣漂亮和方便
看定義
functionclass(classname, super)
local supertype = type
(super)
local
cls
--如果父類既不是函式也不是table則說明父類為空
if supertype ~= "
function
"and supertype ~= "
table
"then
supertype = nil
super = nil
end--
如果父類的型別是函式或者是c物件
if supertype == "
function
"or (super and super.__ctype == 1) then
--inherited from native c++ object
cls ={}
--如果父類是表則複製成員並且設定這個類的繼承資訊
--如果是函式型別則設定構造方法並且設定ctor函式
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
cls.ctor = function() end
end--
設定型別的名稱
cls.__cname =classname
cls.__ctype = 1
--定義該型別的建立例項的函式為基類的建構函式後複製到子類例項
--並且呼叫子數的ctor方法
function
cls.new(...)
local instance =cls.__create(...)
--copy fields from class to native object
for k,v in
pairs(cls) do instance[k] = v end
instance.class =cls
instance:ctor(...)
return
instance
endelse
--如果是繼承自普通的lua表,則設定一下原型,並且構造例項後也會呼叫ctor方法
--inherited from lua object
if super then
cls ={}
setmetatable(cls, )
cls.super =super
else
cls =
endcls.__cname =classname
cls.__ctype = 2
--lua
cls.__index =cls
function
cls.new(...)
local instance = setmetatable
({}, cls)
instance.class =cls
instance:ctor(...)
return
instance
endend
return
clsend
寫個測試**,注意出錯的部分
local base = class('base')
base.__index =base
function
base:ctor(id)
print('
base:ctor
',id)
self.id =id
endlocal extbase = class('
extbase
',base)
extbase.__index =extbase
function
extbase:ctor(id)
--base:ctor(id)
super(self,id)
print('
extbase:ctor
',id)
end
受傳統語言影響,會在子類呼叫基類的建構函式,而事實上,這導致直接將型別本身作為物件例項傳入
導致self指向是那個型別本身(也是個table)
那就只能這麼寫了
base.ctor(self,id)有點醜了樣,封裝一下super函式,看起來好看一點。。
functionsuper(o,...)
--if (o and o.super and o.super.ctor) then
o.super.ctor(o,...)
--end
end
cocos2dx CCScrollView使用示例
總的來說,就是有乙個容器container 錨點 0,0 大小 為全部內容的大小 scrollview 大小,錨點,setdelegate 視窗大小 setviewsize 設定容器 setcontainer 方向 ccnode m pmedalcontainer ccscrollview m ps...
cocos2d實現語音 Cocos2d 聲音API
param url 聲音路徑 cc.audioengine.playmusic url loop 停止背景 param releasedata 是否釋放聲音資料,預設為false cc.audioengine.stopmusic releasedata 暫停背景 cc.audioengine.pau...
Cocos2d x教程第 14 講 Cocos2d
cocos2d x 2.2.0之前的版本常用的json解析的三方庫一般是 jsoncpp 2.2.x的版本中已經包含了jsoncpp的庫,但是卻把名字給換了,導致引入jsoncpp庫的同志們發生各種衝突.完成上述操作後就可以盡情發揮了.下面讓我們來認識一下幾個主要的類 value value 類建立...