Cocos + Lua 实现对现有组件属性方法的扩充
目录
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所创,推荐一下!我也在群里!