【问题标题】:Swift SpriteKit how to pause the scene after audio is played completelySwift SpriteKit如何在完全播放音频后暂停场景
【发布时间】:2020-07-03 10:11:48
【问题描述】:

在我的 Swift 文件中,当 func gameOver() 被触发时,我会暂停场景。

func gameOver() {

        //TODO: play audio explode.mp3
        self.run(SKAction.playSoundFileNamed("explode", waitForCompletion: true))

        //Pause game
        scene?.isPaused = true

   
}

我希望先播放音频,然后暂停游戏。 问题是游戏会先暂停,当我重新启动游戏时,会播放音频。

【问题讨论】:

    标签: ios swift xcode sprite-kit


    【解决方案1】:

    如果您希望播放音乐但游戏暂停,则需要对游戏组件进行分层。例如,将所有游戏组件放置在名为 gameLayer 的 sknode 上,并将所有控件放置在名为 controlsLayer 的 SKNode 层上。

    现在当你想暂停游戏时,只需调用

    gameLayer.isPaused = true
    

    现在您仍然可以在场景中播放音乐

    【讨论】:

      【解决方案2】:

      waitForCompletion 表示动作持续时间将与音频文件持续时间相同,但run 仅安排动作,而不等待它们完成。您可以添加一个完成处理程序,该处理程序将在操作完成后运行。

          self.run(SKAction.playSoundFileNamed("explode", waitForCompletion: true)) {
             self.scene?.isPaused = true
          }
      

      【讨论】:

      • 嗨@bg2b,这确实允许首先播放音频,但应该停止游戏。我试过你的代码,在播放音频时游戏仍在运行。播放爆炸音频时有没有办法停止/暂停游戏?
      • 您的意思是您希望除了音频继续播放之外的所有其他内容都停止?通常,isPaused 属性适用于节点及其所有子节点。因此,如果您希望场景的某些部分暂停(例如,主运动场)而其他部分继续(例如,播放声音的任何部分),那么一种方法是安排层次结构,以便您想要停止的任何部分都在一个之下父节点并在其上设置isPause
      • 是的,这就是我想要的。我上面有两行代码,你能给我一个例子,如何将这两行代码分成不同的节点层次结构吗?
      • @sky 他已经这样做了 ^ 他的代码是在播放完音乐后如何暂停游戏场景
      • 嗨@RonMyschuk,我可能说的不是很清楚,他的代码先播放音频,然后暂停游戏,但是,我希望游戏先通过,同时播放音频。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多