【问题标题】:Pause all ongoing asyncAfter() delays in SpriteKit game暂停 SpriteKit 游戏中所有正在进行的 asyncAfter() 延迟
【发布时间】:2018-12-20 02:59:32
【问题描述】:

在我的游戏中,流星从天而降。 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 秒?这意味着陨石的生成速度不会被打断。谢谢。

【问题讨论】:

    标签: swift sprite-kit


    【解决方案1】:

    如果您在 SKScene 类中,只需让场景以 SKAction 的形式运行延迟。当您暂停/取消暂停视图或场景时,该操作将暂停和恢复。

    func spawnMeteorite(timeInterval:Double) {
    
        run(SKAction.wait(forDuration: timeInterval), completion: {
            self.spawnMeteorite(timeInterval: timeInterval * 0.9)
        })
    
        print("Spawn Meteorite")
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      相关资源
      最近更新 更多