SpriteKit中的预定计时器

时间:2018-07-30 17:42:54

标签: ios swift timer sprite-kit

我有预定的计时器,可以将精灵节点添加到屏幕上作为障碍物

func timers(){
    personTimer = Timer.scheduledTimer(timeInterval: 1, target: self,     selector: #selector(spawnPerson), userInfo: nil, repeats: true)

    bikeTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(spawnBike), userInfo: nil, repeats: true)

    motorcycleTimer = Timer.scheduledTimer(timeInterval: 2.5, target: self, selector: #selector(spawnMotorcycle), userInfo: nil, repeats: true)
}

我添加了使这些计时器无效的功能。这样就可以运行奖金“级别”。

func invalidateTimers(){
    // Obstacles
    personTimer.invalidate()
    bikeTimer.invalidate()
    motorcycleTimer.invalidate()
}

当奖金被调用

func bonus() {
    invalidateTimers()
    bonusTimer = Timer.scheduledTimer(timeInterval: 1, target: self,     selector: #selector(spawnDiamonds), userInfo: nil, repeats: true)
}

我遇到的问题是,当奖金运行完毕时,我使BonusTimer无效并重新调用timers()。但是当我这样做时,函数中的所有计时器似乎都触发了两次。既然不能暂停它们,这是一个简单的解决方法。

2 个答案:

答案 0 :(得分:3)

与其使用计时器,不如考虑使用SKAction,因为它们可以与SpriteKit很好地配合使用。要启动计时器,请运行:

let wait1 = SKAction.wait(forDuration: 1)
let personTimer = SKAction.repeatForever(SKAction.sequence([wait1, SKAction.run {
        spawnPerson() // spawnBike() etc. for each different timer
    }]))
self.run(personTimer, withKey: "spawnPerson")

具有修改的等待值和每个不同计时器的函数调用。然后停止计时器,运行:

self.removeAction(forKey: "spawnPerson")

对于每个使用不同键的操作。

答案 1 :(得分:0)

您可以使用update:子类的SKScene方法来代替计时器。它每帧调用一次,并具有currentTime参数。因此,您可以轻松计算所需的时间间隔并触发相应的方法。