如何设置计时器并使用Swift在游戏场景中显示它

时间:2018-02-08 21:28:10

标签: ios swift timer nstimer

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

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

在GameScene类下,然后在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)

2 个答案:

答案 0 :(得分:1)

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

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

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

致电

startTimer()
直接在viewDidLoad

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

答案 1 :(得分:0)

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!

如果标签没有挂在故事板中的标签上,那么显式取消导致!会导致崩溃