推薦閱讀:
在游戲中,經常會涉及到計時的功能,主要是倒計時。倒計時通常用在某項活動距離結束的剩余時間以及距離開始某項活動開始的時間。對於不同的游戲引擎,提供的計時方法也有所差異。最近正在使用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 + "分") : "");
},
當然,計時的方法肯定不止這一種,這只是實現計時器的一個方法,選擇這個方法的原因時我覺得比較簡單,易懂,如果你有更好的方法,歡迎屏幕下方留言~~