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

10-10 20:43