无法识别的选择器通过Timer发送到实例

时间:2017-03-30 20:51:19

标签: swift sprite-kit

我正在使用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")
}

1 个答案:

答案 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")
}