SpriteKit中的预定计时器



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

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和recall timers((无效。但当我这样做的时候,函数中的所有计时器似乎都启动了两次。有什么简单的解决方法,因为它们不能只是暂停。

与其使用计时器,不如考虑使用SKActions,因为它们可以很好地与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")

每个动作使用不同的键。

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

最新更新