在我的游戏中,流星从天而降。spawnMeteorite
函数在游戏开始时调用,并在满足延迟后调用自身,此时陨石之间的新延迟比以前稍小。
func spawnMeteorite(timeInterval:Double) {
delay(timeInterval) {
self.spawnMeteorite(timeInterval: timeInterval*0.9)
}
// Create meteorites
}
func delay(_ delay:Double, closure:@escaping ()->()) {
let when = DispatchTime.now() + delay
DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}
我已经成功地用
self.view?.isPaused = false
暂停了游戏场景中的所有动画。然而,流星继续繁殖,因为代码本身仍然在运行。是否有任何方法可以暂停我的程序中所有正在进行的延迟,以便如果游戏在中途通过3秒延迟暂停,当恢复时,延迟将继续1.5秒以上?这意味着陨石的产卵率不会中断。谢谢。
最佳答案
如果你在SKScene类中,只要让场景以SKAction的形式运行一个延迟。当您暂停/取消暂停视图或场景时,操作将暂停并继续。
func spawnMeteorite(timeInterval:Double) {
run(SKAction.wait(forDuration: timeInterval), completion: {
self.spawnMeteorite(timeInterval: timeInterval * 0.9)
})
print("Spawn Meteorite")
}
关于swift - 暂停SpriteKit游戏中所有正在进行的asyncAfter()延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53861860/