lua的类
(1)lua的类实际上就是lua的 table ,类之间的继承实际上就是吧 table 连到一起了,调用方法和属性,就是先去第一个table搜索如果没有再去连在后面的table里搜索。
(2)lua里的self实际上就是table了,也能代表类名
(3)lua继承
local self = {}
setmetatable(self , classA) 在表self基础上建立classA,classA是一个新表
setmetatable(classB , classA) 在表classA基础上建立classB,classB是一个新表
(4)表唯一的标示
classA.__index = classA
2dx的lua继承
(1)class 是 cocos2d-x 的方法
class("A", B) A 继承 B,B必须是lua文件里的类
(2)setmetatable(A, B) 是 lua 的继承, A 继承 B
(3)通过 tolua 的继承 tolua.getpeer(target) target:cc.Sprite:create(img) 是C++的一个对象
再通过 setmetatable(t, ChilSprite) 实现对 C++对象的继承
local ParentOne = class("ParentOne")
function ParentOne:testDemo()
print('ParentOne demo')
end
--父类 ParentOne
local ChilSprite = class("ChilSprite", ParentOne)
ChilSprite.__index = ChilSprite
function ChilSprite.extend(target)
local t = tolua.getpeer(target) --tolua的继承
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, ChilSprite)
return target
end
function ChilSprite:createS(img)
local sprite = ChilSprite.extend(cc.Sprite:create(img))
return sprite
end
function ChilSprite:myFunc(img)
print("ChilSprite myFunc "..img)
end
function ChilSprite:goFunc()
print("ChilSprite goFunc ")
end
--父类 ChilSprite
local ChilLayer = class("ChilLayer", ChilSprite)
ChilLayer.__index = ChilLayer
function ChilLayer.extend(target)
local t = tolua.getpeer(target)
if not t then
t = {}
tolua.setpeer(target, t)
end
setmetatable(t, ChilLayer)
return target
end
function ChilLayer:createL(img)
local sprite = ChilLayer.extend(cc.Sprite:create(img))
return sprite
end
function ChilLayer:myFunc(img)
print("ChilLayer myFunc "..img)
end
local function testBccLayer( scene )
local ball = ChilLayer:createL("Images/ball.png")
ball:setPosition(cc.p(VisibleRect:center().x - 110, VisibleRect:center().y - 110))
ball:setScale(3)
scene:addChild(ball, 1111)
local cball = ChilLayer:createS("Images/ball.png") --调用父类的方法
cball:setPosition(cc.p(VisibleRect:center().x + 110, VisibleRect:center().y + 110))
cball:setScale(3)
scene:addChild(cball, 1111)
ball:myFunc("1235") --调用自己的方法,覆盖父类的方法
ball:goFunc() --调用父类的方法
ball:testDemo() --调用父类的父类方法
end
function testBcc(scene)
testBccLayer(scene)
end
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务