Cocos + Lua 实现对现有组件属性方法的扩充

                     Cocos + Lua 实现对现有组件属性方法的扩充


目录

1、博客介绍 

2、内容

(1)思路

(2)实操

3、推送

4、结语


1、博客介绍 

        最近一直在用cocos+lua写东西,之前用lua用的比较少,在工程内发现了一些写法觉得挺好,在这里分享一下,本篇文章的思路和Unity内静态扩展有些许相同之处,都是对现有的组件的属性和方法进行扩展,相较于Unity内的静态拓展,lua的这个拓展应该更加的开放一点。


2、内容

(1)思路

       先说一下思路,道理很简单,lua内的表作用非常的广泛,我们可以向表内任意的去添加属性和方法,而对于Cocos内的组件,例如Label,Button等等,其方法和属性都是封装好的,我们如果想要再去扩充,可以新建一个表,对这个表内去添加需要的属性和方法,然后将这个表的所有信息赋值给需要操作的Label或者Button,就可以实现对应的拓展操作

(2)实操

       这里准备了一个具体的小例子来实现,我们游戏内经常会有一些对Label显示的操作,比如需要某个label去显示1-100的数字变化,这时候我们会用计时器或者回调再或者写个action去完成整个操作,一下我们就用拓展方法来封装一下这个增长数字的操作,方便以后的重复利用。

首先我们写一个表,并且在表内方法实现数字增长的逻辑:

--拓展所用的表
addFunc               =   {}
addFunc.updateNum     = 0
--增长数字的方法  startNum:起始数字  targetNum:终点数字  durTime:时间   interal:每次变化间隔
function addFunc:updateLabelByNum(startNum,targetNum,durTime,interal)
	addFunc.updateNum = startNum
	--变化的总量
	local total = targetNum - startNum
	--变化的次数
	local changeNum = durTime/interal
	--单次变化的量
	local singleNum = total/changeNum
	self:runAction(cc.RepeatForever:create(cc.Sequence:create(cc.DelayTime:create(interal), cc.CallFunc:create(function()
        	addFunc.updateNum = addFunc.updateNum + singleNum
        	self:strString(tostring(self.updateNum))
        	if addFunc.updateNum>= targetNum then
        		self:strString(tostring(targetNum))
        		self:stopAllActions()
        	end
    end)))) 
end

然后我们实现一个赋值的方法:

function inherit( sub, base )
    for k,v in pairs(base) do
        if sub[k] == nil then
            sub[k] = v
        end
    end
    return sub
end

最后我们在使用Label组件的时候继承一下我们写好的拓展方法:

    inherit(theLabel, addFunc)

需要增长数字的时候直接调用拓展方法即可:

--Label从1变化到100,历经5秒,每次变化间隔1/20秒
theLabel:updateLabelByNum(1,100,5,1/20)

3、推送

Github:https://github.com/KingSun5


4、结语

        若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

猜你喜欢

转载自blog.csdn.net/Mr_Sun88/article/details/104898767