计时器(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)的更多相关文章
- android 两种实现计时器时分秒的实现,把时间放在你的手中~
可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...
- TCP四种计时器
TCP共使用以下四种计时器,即重传计时器.坚持计时器.保活计时器和时间等待计时器 .这几个计时器的主要特点如下: 1.重传计时器 当TCP发送报文段时,就创建该特定报文段的重传计时 ...
- C# - 计时器Timer
System.Timers.Timer 服务器计时器,允许指定在应用程序中引发事件的重复时间间隔. using System.Timers: // 在应用程序中生成定期事件 public class ...
- JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动
一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...
- VBA中使用计时器的两种方法
'================================ ' VBA采用Application.OnTime实现计时器 ' ' http://www.cnhup.com '========= ...
- js 短信验证码 计时器
$(function(){ getMsg(); //页面加载完成之后执行 }) function getMsg(){ //注册按钮的点击事件 $("#smsBtn").on(&qu ...
- 【效率】专为Win7系统设计的极简番茄计时器 - MiniPomodoro (附源码)
时光飞逝,一转眼坚持使用番茄工作法已经快3年了!能坚持这么长时间,主要还是得益于它的简单.但是令人纠结的是,这么长时间以来,换了7款不同的番茄计时器,仍然没有找到非常满意的: ■ 机械的噪音太大,会妨 ...
- 计时器StopWatch示例
计时器 StopWatch stwatch = new StopWatch(getClass().getSimpleName()); try{ stwatch.start(joinPoint.getS ...
- SharePoint 2013 图文开发系列之计时器任务
SharePoint的计时器任务,又称TimerJob,由服务里的Timer服务执行,在管理中心管理,是一个类似于Windows任务计划的功能,方便定时执行一些需要的功能,以免影响服务器性能. 在Sh ...
随机推荐
- 深入理解Java中的锁(一)
Java中锁的概念 自旋锁 : 是指当一个线程在获取锁的时候,如果锁已经被其他线程获取,那么该线程将循环等待,然后不断判断锁是否能够被成功获取,直到获取到锁才会退出循环. 乐观锁 : 假定没有冲突,在 ...
- Linux 安装MySql——apt-get版
0)apt-get update 1)通过apt-get安装 更新设置到最新系统: sudo apt-get update sudo apt-get upgrade sudo apt-ge ...
- ThreadPoolExecutor带来的性能问题
使用线程池,一般情况下会带来性能提升,并且使用线程池管理线程,减少了每个任务调用的开销,通常可以在执行大量异步任务时提供增强的性能. 但是在高并发的情况下,会因为使用不当导致性能下降,并且下降得比较严 ...
- Spring MVC中的 权限拦截定义 以及 权限拦截的研发步骤
权限拦截 (拦截器: 对请求进行区分) 1 实现的价值(作用) 用户未登录:访问没用登录的URL,拦截到以后 跳转回登录 用户未登录:访问登录的URL,直接放行到后续流程处理框架,进行后续的操作 用户 ...
- tp3 的前端内置标签
Volist 标签 volist标签通常用于查询数据集(select 方法),对于查询出来的结果数组进行遍历输出. 首先赋值: $User = M("User"); $list = ...
- 【iOS】edgesForExtendedLayout
在 iOS 7.0 中,苹果引入了一个新的属性,叫做 edgesForExtendedLayou,它的默认值为 UIRectEdgeAll. 当你的容器是 navigationController 时 ...
- DedeCMS V5.7 SP2前台文件上传漏洞(CVE-2018-20129)
DedeCMS V5.7 SP2前台文件上传漏洞(CVE-2018-20129) 一.漏洞描述 织梦内容管理系统(Dedecms)是一款PHP开源网站管理系统.Dedecms V5.7 SP2版本中的 ...
- pythonday03数据类型(一)
今日内容 1.整型 2.布尔型 3.字符串 4.补充 5.作业讲解 6,pycharm自动生成头文件 1.整型(int) py2 int/long 32位电脑:-2147483648-21474836 ...
- 【KakaJSON手册】01_JSON转Model_01_基本用法
在iOS开发中,后台返回的数据大多是JSON格式,对应地会被网络框架层解析成Swift中的Dictionary.Array.由于数据类型的复杂.字段的繁多,直接使用Dictionary.Array会比 ...
- 项目构建分析和 webpack 优化实践
加入新公司一个月,最近接手在做一个 chrom 浏览器插件的项目,开发过程中发现项目打包的时间很长,足足有30多秒,这是让人很难接受的,而且构建的显示了几条包体积过大的提示信息: 可以看到,打包后有三 ...