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()
中创建的定时器负责每秒更新数字,你不应该一次又一次地启动它
我正在尝试设置一个从 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()
中创建的定时器负责每秒更新数字,你不应该一次又一次地启动它