踩地雷 之 計時器

Ryan Chang
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(),所以結束才能正常結束。

--

--

Ryan Chang
Ryan Chang

Written by Ryan Chang

讓我們一起用SWIFT來改變世界(賺錢)吧!!!