计时器(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 ...
随机推荐
- python红蓝英雄大乱斗(面向对象实现)
红蓝英雄大乱斗 游戏规则 ''' 有红蓝两方英雄(可自定义个数) 随机一方英雄使用随机攻击方式攻击另一方英雄,任意一方英雄全部阵亡则游戏结束 每个英雄有 名字.生命值.普通攻击.Q技能攻击.W技能攻击 ...
- 【Java中级】(三)IO
1. 流分为字节流和字符流 2. 字节流下面常用的又有数据流和对象流 3. 字符流下面常用的又有缓存流 文件对象 文件和文件夹都用File表示 //file path : 文件的绝对路径或相对路径Fi ...
- E-R图怎么绘制
E-R图中主要涉及到的元素有: 实体:用长方形表示 关联关系:用菱形表示 属性:用椭圆表示 参考一个例子:
- Android的简述4
NoteEditor深入分析 首先来弄清楚“日志编辑“的状态转换,通过上篇文章的方法来做下面这样一个实验,首先进入“日志编辑“时会触发onCreate和onResume,然后用户通过Option Me ...
- react项目建立导入包问题总结
1.react和react-dom包 使用react开发网页的话,我们难免会下载两个包,一个是react,一个是react-dom,其中react是react的核心代码.react的核心思想是虚拟Do ...
- Eclipse Other Projects小问题
Eclipse 不知什么时候多了个 "Other Projects" 文件夹,所有的项目又多了一层目录,如图所示: 虽然对功能没任何影响,但每次打开有些麻烦,多少感觉有些不爽…… ...
- zmnXAglTcg
#include <map>#include <cmath>#include <stack>#include <queue>#include <l ...
- RocketMQ中Broker的启动源码分析(一)
在RocketMQ中,使用BrokerStartup作为启动类,相较于NameServer的启动,Broker作为RocketMQ的核心可复杂得多 [RocketMQ中NameServer的启动源码分 ...
- 对于HTTP过程中POST内容加密的解决方案
0x00前言 前几天我师傅和我提及了这件事情 正常情况下 抓包过程中遇到加密情况会很迷茫 昨天把这个都弄了一下 也感谢大佬中间的指导 我一开始看到密码的类型下意识的是base64 但是去解密发现不对 ...
- 数据结构之堆栈java版
import java.lang.reflect.Array; /* 具体原理在c++版已经说的很清楚,这里不再赘述, 就提一点:java的泛型具有边界效应,一旦离开作用域立马被替换为object类型 ...