我正在使用spritekit制作游戏,并希望每秒检查变量的一些更新(而不是使用经常检查的更新方法)。 我创建了一个scheduledTimer,它有一个我想要运行的函数的选择器,但是它给了我错误:发送到实例的无法识别的选择器。
据我所知,该功能可能需要正确的发件人,但它是什么?谢谢
var timer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(GameScene.updateEachSecond),
userInfo: nil,
repeats: true)
func updateEachSecond() {
print("1 second has passed")
}
答案 0 :(得分:5)
您需要声明您的计时器
var timer = Timer()
作为GameScene的财产
并将您的计时器初始化移动到didMove(to:或在场景加载完成后运行的任何其他方法。
override func didMove(to view: SKView) {
timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(updateEachSecond), userInfo: nil, repeats: true)
}
评论中建议的另一个选项是检查更新方法,如果第二个更改:
var timeInterval: TimeInterval = 0
var time = 0
override func update(_ currentTime: TimeInterval) {
if timeInterval < currentTime.rounded(.down) {
time += 1
timeInterval = currentTime
updateEachSecond()
}
}
func updateEachSecond() {
print("Time:", time, terminator: "s\n")
}