踩地雷 之 計時器
Jun 22, 2021
計時器的部分:
原本想要練習Core Data,想說用遊戲的記分板來練習,偶然看到小時候在玩的“踩地雷”,就心血來潮想說來製作看看,殊不知這真的是個頭痛的開始,
不過這裡先講講”計時器“的部分,原先在研究DateFormatter的相關資料,後來弄了半天才想到計時器的時間是走自己的時間,也不需要一定用DateFormatter,所以才使用下面這樣的方式:
var timer: Timer?//這行要先宣告
timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(startCount), userInfo: nil, repeats: true)
使用Timer 並且每0.01秒重複呼叫selector(func)一次即可。
停止的時候要使用
timer?.invalidate()
不然Timer.scheduledTimer 會在背景繼續運作,呼叫timer?.invalidate()才可以讓計時器停下來。
以下為沒有停下來的例子:
這裡還有一件最重要的事情,在寫入遊戲的時候會在點擊地板時,就會開啟計時器,直到遊戲結束(成功或是失敗),計時器會停止。
但在測試的過程中發現,因為每次點擊都會觸發一次timer的呼叫。
timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(startCount), userInfo: nil, repeats: true)
所以在遊戲結束的時候,只有時間歸零有成功,但是計時器仍然會繼續計算,後來測試後發現,只要超過兩次呼叫Timer.ScheduledTimer之後,計時器基本上停不下來,所以應該要在每次呼叫Timer.ScheduledTimer之前就要先讓他停下來。
timer?.invalidate()
左圖為一開始測試的異常狀態。右圖則是在開始Timer.ScheduledTimer之前有呼叫timer?.invalidate(),所以結束才能正常結束。