Cocos Code IDE :V1.0.0.RC0
Cocos2d-x-3.2rc0
Cocos2dx中提供了类继承的一工具函数,在引擎中的/cocos/scripting/lua-bindings/script目录下有一个名为extern.lua,具体怎么用我们看代码。
用lua进行面向对象的编程,声明方法和调用方法统一用冒号,对于属性的调用全部用点号。
在工程中创建一新lua文件,名为HeroRole.lua。这是我们定义的HeroRole类。实现代码如下:
HeroRole = class("HeroRole") HeroRole.__index = HeroRole --英雄人物属性 HeroRole.name = nil --自身名称 HeroRole.level = nil --自身等级 --冒号的作用可以传递一个实参,也就是self,相当于c++的this function HeroRole:extend(target) local t = tolua.getpeer(target) if not t then t = {} tolua.setpeer(target, t) end setmetatable(t, HeroRole) return target end --创建HeroRole对象方法 function HeroRole:createHeroRole(_imageNameHero, _name, _level) local sprite = HeroRole:extend(cc.Sprite:create(_imageNameHero)) sprite.name = _name sprite.level = _level return sprite end --更改名称 function HeroRole:setHeroName(value) self.name = value end --得到名称 function HeroRole:getHeroName() return self.name end --设置等级 function HeroRole:setHeroLevel(value) self.level = value end --得到等级 function HeroRole:getHeroLevel() return self.level end
local function myInit() require "src/HeroRole" --创建dogObj对象 local dogObj = HeroRole:createHeroRole("res/dog.png", "Dog", 99) dogObj:setPosition(size.width/2,size.height/2) mainLayer:addChild(dogObj) cclog("Dog Object name == %s, leval == %d",dogObj:getHeroName(),dogObj:getHeroLevel()) --[LUA-print] Dog Object name == Dog, leval == 99 dogObj:setHeroName("BigDog") --更改英雄名称 dogObj:setHeroLevel(88) --更改英雄等级 cclog("BigDog Object name == %s, leval == %d",dogObj:getHeroName(),dogObj:getHeroLevel()) --[LUA-print] BigDog Object name == BigDog, leval == 88 --创建catObj对象 local catObj = HeroRole:createHeroRole("res/crop.png", "Cat", 100) catObj:setPosition(size.width/2,size.height/4) mainLayer:addChild(catObj) cclog("Cat Object name == %s, leval == %d",catObj:getHeroName(),catObj:getHeroLevel()) --[LUA-print] Cat Object name == Cat, leval == 100 end