cocos2d-x 的lua继承
2016-06-29 20:32
274 查看
lua的类
(1)lua的类实际上就是lua的 table ,类之间的继承实际上就是吧 table 连到一起了,调用方法和属性,就是先去第一个table搜索如果没有再去连在后面的table里搜索。
(2)lua里的self实际上就是table了,也能代表类名
(3)lua继承
(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++对象的继承
(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
相关文章推荐
- Cocos2d 动作使用
- cocos2dx-深度解析plist文件(二)(CCSpriteFrameCache怎么从解析出的数据创建精灵帧的)
- JavaScript强化教程——cocosjs屏幕适配方案
- JavaScript强化教程——cocosjs屏幕适配方案
- cocos2d SocketIo列子
- cocos2d WebSocket简单例子
- Cocos2d-x 3.11.1 Android Windows 10 加载csd
- cocos2d-x lua mvc模式
- Cocosd2d 使用box2d完成碰撞检测
- Cocosd2d 实现图像描边shader
- Cocosd2d 实现灰度shader
- Cocosd2d 手动编写一个shader
- Cocosd2d-js this关键字使用
- Cocosd2d-js 判断字符串包含
- CVP认证学习笔记--李天宇026对数组的使用
- CVP认证学习笔记--李天宇025添加音乐和音效
- CVP认证学习笔记--李天宇024粒子编辑器和粒子动画
- CVP认证学习笔记--李天宇023使用animationEditor编辑骨骼动画
- CVP认证学习笔记--李天宇022使用animationEditor编辑帧动画
- CVP认证学习笔记--李天宇021纹理打包文件读取