计时器(CocosCreator)

简介: 计时器(CocosCreator)
推荐阅读:

      在游戏中,经常会涉及到计时的功能,主要是倒计时。倒计时通常用在某项活动距离结束的剩余时间以及距离开始某项活动开始的时间。对于不同的游戏引擎,提供的计时方法也有所差异。最近正在使用CocosCreator开发项目,恰好也遇到了该需求,就来聊聊CocosCreator中计时功能的实现方法:
在CocosCreator中,提供了一个方法:

cc.repeatForever();

      对于这个方法的解释是:永远地重复一个动作,有限次数内重复一个动作请使用 repeat 动作由于这个动作不会停止,所以不能被添加到 cc.sequence 或 cc.spawn 中。
下面就是用该方法来实现计时效果:

 countDown(time) {
        var self = this;
        
        var call1 = app.callFunc(function (adt) {
            time = time - 1;
            cc.log("当前倒计时时间为:", time);
            if (time <= 0) {
                cc.log("倒计时结束~~~");
                self.uiRoot.countdown.stopAllActions();
            }
            self.uiRoot.txt_countdown.string = "" + self.formatTime(Math.max(0, time));
        }, self.uiRoot.countdown);
        
        var delay = cc.delayTime(1);
        self.uiRoot.countdown.runAction(cc.repeatForever(cc.sequence(call1, delay)));
    },

      上面的方法其实就是通过顺序执行一系列事情(time--),来达到计时的效果。其中self.uiRoot.countdown是计时文本的父节点,self.uiRoot.txt_countdown是计时器的显示文本。
      上面代码中的formatTime()方法,是通过给定一个时间值(秒),来转换为()天()时()分()秒,当然,你也可以通过实际情况决定返回的单位。formatTime代码如下:

    /// 计算时间格式
    formatTime(tm) {
        var d = Math.floor(tm / 86400)
        var h = Math.floor(tm % 86400 / 3600);
        var m = Math.floor(tm % 3600 / 60);

        var s = Math.floor(tm % 60);
        // return "{0}{1}{2}{3}".format(d > 0 ? ("" + d + "天") : "", h > 0 ? ("" + h + "时") : "", m > 0 ? ("" + m + "分") : "", s > 0 ? ("" + s + "秒") : "0秒");

        if (tm < 60) { return s; }
        return "{0}{1}{2}".format(d > 0 ? ("" + d + "天") : "", h > 0 ? ("" + h + "时") : "", m > 0 ? ("" + m + "分") : "");
    },

      当然,计时的方法肯定不止这一种,这只是实现计时器的一个方法,选择这个方法的原因时我觉得比较简单,易懂,如果你有更好的方法,欢迎屏幕下方留言~~

相关文章
cocoscreator实现spine用外部图片进行换皮
cocoscreator实现spine用外部图片进行换皮
819 0
防抓包破解(HTTP.Debugger)
防抓包破解(HTTP.Debugger)
3818 3
|
8月前
|
IDE 开发工具 数据安全/隐私保护
鸿蒙开发:应用上架第三篇,配置签名信息打出上架包
可以说,所有的签名信息文件,我们都已经完成了,正所谓,万事俱备只欠东风,这篇文章,我们着重概述一下,如何配置签名信息以及如何打出签名包。
342 4
鸿蒙开发:应用上架第三篇,配置签名信息打出上架包
|
Android开发
Android面试题之Activity的启动模式和flag
Android Activity的四种启动模式:standard(默认,每次启动创建新实例),singleTop(栈顶复用,不走onCreate,调用onNewIntent),singleTask(栈内唯一,清除上方Activity)和singleInstance(单独栈内唯一)。启动模式在AndroidManifest.xml中配置,Intent Flags如FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP可实现类似功能。了解这些对于处理Activity栈管理至关重要。
271 0
rgba为什么最大值是255??
rgba为什么最大值是255??
|
JavaScript 前端开发
JS try catch用法:异常处理
【10月更文挑战第12天】try/catch` 是 JavaScript 中非常重要的一个特性,它可以帮助我们更好地处理程序中的异常情况,提高程序的可靠性和稳定性。
593 56
|
开发工具 Android开发
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
678 1
|
JSON 算法 数据可视化
⚡Three.js-在场景中导入3D动画模型
⚡Three.js-在场景中导入3D动画模型
47626 4
⚡Three.js-在场景中导入3D动画模型
|
JavaScript 前端开发
JavaScript从二维数组抽取元素组成新数组的三种方法
JavaScript从二维数组抽取元素组成新数组的三种方法
|
前端开发
ElementUI——el-upload上传前校验图片宽高
ElementUI——el-upload上传前校验图片宽高
569 0