範例-循環倒數計時器

循環倒數計時器適合用在嵌套式計時器裡
譬如資源型計時器, 如下圖:

我們從最最外層的計時器開始建立,

  • 總恢復時間: 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就是了**

results matching ""

    No results matching ""