暂停SpriteKit游戏中所有正在进行的asyncAfter()延迟



在我的游戏中,流星从天而降。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")
}

最新更新