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

时间:2018-12-20 02:59:33

标签: swift sprite-kit

在我的游戏中,流星从天上掉下来。 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暂停GameScene中的所有动画。但是,由于代码本身仍在运行,所以流星继续产生。

是否有任何方法可以暂停程序中所有正在进行的延迟,以便如果游戏在3秒钟的延迟中途暂停,则在恢复播放后,延迟还会继续1.5秒吗?这意味着陨石产卵的速度不会被打断。谢谢。

1 个答案:

答案 0 :(得分:1)

如果您属于SKScene类,请以SKAction的形式延迟场景。当您暂停/取消暂停视图或场景时,操作将暂停并继续。

func spawnMeteorite(timeInterval:Double) {

    run(SKAction.wait(forDuration: timeInterval), completion: {
        self.spawnMeteorite(timeInterval: timeInterval * 0.9)
    })

    print("Spawn Meteorite")
}