加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-x 的lua继承

发布时间:2020-12-14 17:06:45 所属栏目:百科 来源:网络整理
导读:lua的类 (1)lua的类实际上就是lua的 table ,类之间的继承实际上就是吧 table 连到一起了,调用方法和属性,就是先去第一个table搜索如果没有再去连在后面的table里搜索。 (2)lua里的self实际上就是table了,也能代表类名 (3)lua继承 local self = {}setmeta

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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读