勤奋努力,持之以恒!
开发环境:
Mac OSX 10.9.3
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
在main.lua中我们创建对象,代码如下:
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