`
445822357
  • 浏览: 730876 次
文章分类
社区版块
存档分类
最新评论

Cocos2dx-lua 实现lua面向对象编程,并继承CCSprite

 
阅读更多

勤奋努力,持之以恒!


开发环境:
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



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics