cocos2dx 3.3 Lua 实现倒计时功能
来源:互联网 发布:管家婆erp软件 编辑:程序博客网 时间:2024/05/21 10:57
这里用cocos2dx 3.3 + Lua 实现一个倒计时的功能,游戏中的倒计时是不可或缺的,我把倒计时写成一个lua类,这样调用的时候就方便很多了,这个类还可以有很多的扩展性,这里有两种显示方法,如果Countdown.showtype == true ,就显示成 倒计时:00:10:05 格式的,如果Countdown.showtype == false,就显示成这种 00:05后 格式的但是,如果要同时显示两个倒计时,就不可以了,只能显示一个倒计时。通常倒计时到0时,我们会做一些限制,这里也实现了这个方法,如果倒计时为0时,就调用我们传进去的函数,下面就来看这个倒计时类的使用方法。。
我还引用了这条博客 http://blog.csdn.net/song_hui_xiang/article/details/13509825
下面是一个类文件,Countdown.lua
--写一个倒计时类local Countdown = class("Countdown")Countdown.__index = CountdownCountdown.hour = nil --小时Countdown.minute = nil --分钟Countdown.second = nil --秒钟Countdown.func = nilCountdown.showtype = truefunction Countdown.create() local label = Countdown.new() return labelendfunction Countdown.ctor()Countdown.winsize = cc.Director:getInstance():getWinSize()Countdown.scheduler = cc.Director:getInstance():getScheduler()Countdown.schedulerID = nil print("输出======Countdown.ctor()=========") print("倒计时进行中。。。。")end--设置倒计时到00:00:00时调用这个函数,传入的参数是一个函数function Countdown.function_(f) Countdown.func = f endfunction Countdown.settime(hour,minute,second)Countdown.hour = hour --小时Countdown.minute = minute --分钟Countdown.second = second --秒钟endfunction Countdown.gettime()return Countdown.hour,Countdown.minute,Countdown.secondendfunction Countdown.add_0()--将int类型转换为string类型 Countdown.hour = tostring(Countdown.hour)Countdown.minute = Countdown.minute .. ""Countdown.second = Countdown.second .. ""--当显示数字为个位数是,前位用补上if string.len(Countdown.hour) == 1 then Countdown.hour = "0" .. Countdown.hourendif string.len(Countdown.minute) == 1 then Countdown.minute = "0" .. Countdown.minuteendif string.len(Countdown.second) == 1 then Countdown.second = "0" .. Countdown.secondendend--创建一个Label,传入x,y坐标function Countdown.Showlabel(x,y)--Countdown.time如果不等于空,就先remove掉 if Countdown.time ~= nil then Countdown.time:getParent():removeChild(Countdown.time,true) Countdown.time = nil end --创建时间标签用以显示 Countdown.time = cc.LabelTTF:create("倒计时:" .. Countdown.hour .. ":" .. Countdown.minute .. ":" .. Countdown.second,"fonts/Marker Felt.ttf",35)Countdown.time:setColor(cc.c3b(255,0,0))Countdown.time:setPosition(cc.p(Countdown.winsize.width/2,Countdown.winsize.height/2))return Countdown.timeend--倒计时更新函数function Countdown.anticlockwiseUpdate(time)-- Countdown.second = Countdown.second -1 --加上tonumber也可以,如下面,不加也可以,lua有这个功能的 Countdown.second = tonumber(Countdown.second) -1 if Countdown.second == -1 then if Countdown.minute ~= -1 or Countdown.hour ~= -1 then Countdown.minute = Countdown.minute - 1 Countdown.second = 59 if Countdown.minute == -1 then if Countdown.hour ~= -1 then Countdown.hour = Countdown.hour - 1 Countdown.minute = 59 if Countdown.hour == -1 then --倒计时结束停止更新 if Countdown.schedulerID ~= nil then Countdown.scheduler:unscheduleScriptEntry(Countdown.schedulerID) Countdown.schedulerID = nil end Countdown.second = 0 Countdown.minute = 0 Countdown.hour = 0 Countdown.time:setColor(cc.c3b(0,255,0)) --以绿色标识结束 Countdown.func() --倒计时为0时,调用这个函数 end end end end end Countdown.second = tostring(Countdown.second) Countdown.minute = tostring(Countdown.minute) Countdown.hour = tostring(Countdown.hour) if string.len(Countdown.second) == 1 then Countdown.second = "0" .. Countdown.second end if string.len(Countdown.minute) == 1 then Countdown.minute = "0" .. Countdown.minute end if string.len(Countdown.hour) == 1 then Countdown.hour = "0" .. Countdown.hour end if Countdown.showtype == true then Countdown.time:setString("倒计时:" .. Countdown.hour ..":".. Countdown.minute ..":".. Countdown.second) elseif Countdown.showtype == false then Countdown.time:setString(Countdown.minute ..":".. Countdown.second .. "后") end end--倒计时刷新函数function Countdown.scheduleFunc() --隔一秒刷新这个函数 Countdown.schedulerID = Countdown.scheduler:scheduleScriptFunc(Countdown.anticlockwiseUpdate,1,false) end--移除这个刷新函数function Countdown.remove_scheduler() if Countdown.schedulerID ~= nil then Countdown.scheduler:unscheduleScriptEntry(Countdown.schedulerID) Countdown.schedulerID = nil endend--重设function Countdown.reset(hour,minute,second) Countdown.remove_scheduler() Countdown.hour = hour --小时 Countdown.minute = minute --分钟 Countdown.second = second --秒钟 Countdown.scheduleFunc() endfunction Countdown.remove_hour() if Countdown.time ~= nil then if tonumber(Countdown.hour) == 0 then --设为分钟:秒 如09:11 Countdown.time:setString(Countdown.minute ..":".. Countdown.second .. "后") Countdown.showtype = false end end endreturn Countdown
有了上面这个倒计时类文件之后,下面我们就来用一下:
local mainLayer = cc.Layer:create() local Countdown_a = require("src/Countdown") --将倒计时类赋给一个值 Countdown_a.remove_scheduler() --如果有刷新,就先删除,赋值为nil Countdown_a.ctor() Countdown_a.settime(0,0,5) --设置时间: 时钟,分钟,秒钟 Countdown_a.add_0() --将传入的时间,全部转成string类型的 local tt = Countdown_a.Showlabel(1,1) --传入x,y坐标值,创建一个label显示 Countdown_a.scheduleFunc() --创建一个刷新函数 local function call_f() --这里是倒计时结束后,要调用的函数 print("----倒计时为0时,即结束了,调用这个函数call_f()-----") end Countdown_a.function_(call_f) --我们把函数作为参数,传到这个类中 mainLayer:addChild(tt,3) --把label 添加到层中
经过上面的代码,一个倒计时就创建成功了,如下图:
倒计时中.........
倒计时结束后!!!!
这里是第二种显示:00:05后
local layer = cc.Layer:create() local Countdown_b = require("src/Countdown") --将倒计时类赋给一个值 Countdown_b.remove_scheduler() --如果有刷新,就先删除,赋值为nil Countdown_b.ctor() Countdown_b.settime(0,0,9) --设置时间: 时钟,分钟,秒钟 Countdown_b.add_0() --将传入的时间,全部转成string类型的 local ttf = Countdown_b.Showlabel(1,1) --传入x,y坐标值,创建一个label显示 ttf:setScale(2) --扩大两倍 Countdown_b.remove_hour() --移除时钟的显示 Countdown_b.scheduleFunc() --创建一个刷新函数 local function call_f() --这里是倒计时结束后,要调用的函数 print("----倒计时为0时,即结束了,调用这个函数call_f()-----") end Countdown_b.function_(call_f) --我们把函数作为参数,传到这个类中 layer:addChild(ttf,3) --把label 添加到层中
倒计时中.........
倒计时结束后!!!
0 0
- cocos2dx 3.3 Lua 实现倒计时功能
- Lua 实现倒计时功能
- 【cocos2dx 3.3 lua】05 环绕倒计时效果
- cocos2dx,lua,倒计时的应用
- cocos2dx 3.1 倒计时实现
- lua中实现倒计时
- lua中实现倒计时
- cocos2dx lua实现按钮的放大和缩小功能
- cocos2dx 描边(lua实现)
- cocos2dx-lua实现弹幕
- 实现倒计时功能
- JavaScript实现倒计时功能
- ASP实现倒计时功能
- 倒计时功能的实现
- js实现倒计时功能
- js实现倒计时功能
- js实现倒计时功能
- android 实现倒计时功能
- 【Java.Spring.Core】【IoC】Beans
- iOS 视频预览 录制
- DirectX学习——序章
- Objective-C 中的id到底是什么
- javascript复习笔记(三)关于变量,作用域,typeof 与instanceof
- cocos2dx 3.3 Lua 实现倒计时功能
- 2014年ACM/ICPC亚洲区现场赛广州赛区总结
- Android开发教程四大组件详解
- Android Studio 1.0 初体验
- 399元八核平板? 七彩虹G708八核评测
- CSS 3 Transition(变换)
- iOS之UIScrollView的使用
- klfdjsg lkjfdlks
- C小程序 - fork理解