Swift 如何设置计时器并将其显示在游戏场景中

How to set up a timer and display it on a game scene with Swift

我正在尝试设置一个从 60 秒到 0 的计时器,并在我的游戏场景中显示计数。但是,当我执行以下操作时,我仍然 运行 遇到问题: 在我的 GameScene.swift 文件中,我创建了以下内容:

 var gameTimer = 60
 var timer = Timer()
 @IBOutlet var timerLabel: UILabel!

在 GameScene class 下,然后在 ViewDidLoad 下我做了:

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(GameViewController.startTimer), userInfo: nil, repeats: true)

其中 startTimer 是一个具有以下内容的函数:

    @objc func startTimer()  {
    timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(GameViewController.updateTimer), userInfo: nil, repeats: true)
}

updateTimer 是另一个更新定时器的函数:

    @objc func updateTimer(){
    gameTimer -= 1
    timerLabel.text = String(gameTimer)

}

但是当我启动游戏时,游戏总是崩溃。我在这里做错了什么?任何帮助表示赞赏。

对于那些询问错误消息的人: 线程 1:致命错误:在展开可选值时意外发现 nil

它指向这行代码:

        timerLabel.text = String(gameTimer)

1- 像这样声明定时器

 var timer:Timer ?

2- viewDidLoad

中必须是 1 个计时器
 timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(GameViewController.startTimer), userInfo: nil, repeats: true)

用那个方法

@objc func updateTimer(){
  gameTimer -= 1
  timerLabel.text = String(gameTimer)
}

同时检查 timerLabel 到 stoyboard 的连接作为线路

@IBOutlet var timerLabel: UILabel!

如果标签未挂接到故事板中的标签,则显式展开 ! 会导致崩溃

如果行 timerLabel.text = String(gameTimer) 导致此崩溃,则意味着 timerLabel 变量在该点保持为 nil。确保您的 @IBOutlet 与故事板中的标签相关联。

此外,现在与您的问题无关,而不是

timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(GameViewController.startTimer), userInfo: nil, repeats: true)

致电

startTimer()

直接在viewDidLoad中。

startTimer()中创建的定时器负责每秒更新数字,你不应该一次又一次地启动它