範例-循環倒數計時器
循環倒數計時器適合用在嵌套式計時器裡
譬如資源型計時器, 如下圖:
我們從最最外層的計時器開始建立,
- 總恢復時間: 24:00
- 總恢復時間的每一秒都要倒數在UI畫面上
- 總恢復時間數完畢後做某件事情
TimerEx.Countdown(24*60) // 總時間
.On1Second(t => txTotal.text = ((int)t).ExFormatTimeMMSS()) // 顯示總時間倒數
.OnComplete(t => Debug.Log("do something")) // 總時間倒數完事件
.Start();
接著建立內層的計時器
- 內層計時器是基於外層計時器的時間內, 循環計時
- 此例中的內層計時器就是下次恢復時間: 4:00
- 下次恢復時間每一秒都要倒數在UI上
- 每4分鐘數完要恢復1點軍令
TimerEx.Countdown(24*60) // 總時間(24分鐘)
.Circle(4*60) // 恢復循環時間(4分鐘)
.OnCircle1Second(t => next.text = ((int)t).ExFormatTimeMMSS()) // 顯示下次恢復時間(以4分鐘為基準倒數)
.OnCircleCompleted(t => userData.seal++) // 一個循環完畢要做的事情(軍令+1)
.On1Second(t => total.text = ((int)t).ExFormatTimeMMSS()) // 顯示總恢復時間(以24分鐘為基準倒數)
.OnComplete(t => Debug.Log("do something")) // 總恢復完畢
.Start();
24分鐘正常會有6次的循環,
但如果遇上長時間延遲時,
就不一定可以正常循環完6次,
上面的例子再微調一下:
TimerEx.Countdown(24*60)
.Circle(4*60)
.OnCircle1Second(t => next.text = ((int)t).ExFormatTimeMMSS())
.OnCircleCompleted(t => userData.seal += (int)t) // <-- 改成+t, 這邊的t正常循環會回傳1, 但如果長時間延遲的話, 會回傳正確的循環數補足
.On1Second(t => total.text = ((int)t).ExFormatTimeMMSS())
.OnComplete(t => Debug.Log("do something"))
.Start();
**註: 計時器用法一樣, Countdown換成Count就是了**