我有预定的计时器,可以将精灵节点添加到屏幕上作为障碍物
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()。但是当我这样做时,函数中的所有计时器似乎都触发了两次。既然不能暂停它们,这是一个简单的解决方法。
答案 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
参数。因此,您可以轻松计算所需的时间间隔并触发相应的方法。