簡體   English   中英

永久禁用計時器-iOS Swift 4

[英]Permanently disable Timers - iOS Swift 4

玩家未能在10秒后達到目標后,我試圖完全重新加載游戲場景。

我使用預定的計時器功能倒數秒。

func runTimer() {
    time.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(GameScene_1.updateTimer)), userInfo: nil, repeats: true)
}

這是上面的調用函數:

@objc func updateTimer() {
    if time.seconds == 0 {
        //Lost the game - reload
        reloadLevel()

    }else{

        ...
    }
}

當我用以下代碼重新加載游戲時,倒計時速度變得太高。

func reloadLevel(){
    //Reset
    time.seconds = 10
    time.timer = nil

    //Reload Level
    let newScene = GameScene_1(fileNamed: "GameScene_1")
    newScene?.scaleMode = self.scaleMode
    let animation = SKTransition.flipVertical(withDuration: 2)
    self.view?.presentScene(newScene!, transition: animation)
}

這個runTimer()-函數在我的項目中僅被調用一次,這是用戶結束觸摸屏的時間。 在此之前,一切都很好,但是在那之后,似乎有幾個計時器立即開始倒計時。

有人知道,我如何以一種“干凈”的方式重新加載場景,以便不保存場景中的任何內容嗎? ...或者如何永久停止/刪除上一個計時器?

我試圖在我認為相關的位置(在didMove-函數中,在場景更改之前...)編寫以下三個語句來解決此問題,但顯然沒有任何幫助。

先感謝您!

time.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: (#selector(GameScene_1.updateTimer)), userInfo: nil, repeats: true)

這將創建一個保留循環。 視圖控制器保留計時器(通過我假設的time ;目前尚不清楚確切的time ),而計時器保留計時器(通過target: self )。 即使不正確,計時器也會在運行循環中保留,因此time.timer = nil不會停止它。

目前還不清楚什么time是在這里,所以我不正是某些你所需要的代碼,但你想要的工具是invalidate() 每當視圖離開屏幕( viewWillDisappear )時,以及每次更換計時器時,都需要調用timer.invalidate() 我通常使用類似:

var timer: Timer? {
    willSet {
        timer?.invalidate()
    }
}

這樣,無論何時您將其分配給timer ,舊計時器都會失效(這幾乎總是您的意思)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM