Swift / Spritekit:通过特定场景播放音乐

时间:2015-07-02 17:31:11

标签: swift sprite-kit avfoundation avaudioplayer

我有一个游戏,其中有几个教程场景。

我可以使用AVFoundationAVAudioPlayer()为每个场景添加音乐。

我需要做的是能够在特定场景中启动音乐,并让它继续在后台播放仅用于相关场景。

例如:

  1. 在教程菜单中启动tutorialMusic
  2. 在教程A中继续tutorialMusic
  3. 继续教程B中的tutorialMusic
  4. 在教程菜单中继续tutorialMusic
  5. 在主菜单中停止tutorialMusic并播放mainMenuMusic
  6. 我尝试过什么

    我尝试将AVAudioPlayer()放在视图控制器中,但是我发现传播到每个场景,无论它是什么。我也无法找到视图控制器的AVAudioPlayer实例来阻止它。

    我尝试将tutorialMusic添加到每个教程场景中,但是每次用户打开不同的教程场景时都会重新启动音乐,这很糟糕,如果用户快速移动,会降低性能,真烦人。

    我的问题

    有没有办法在每个子教程场景中扩展主教程场景,以便AVAudioPlayer的主实例可以访问并传播到每个教程?

    最终我想确保在每个部分(教程菜单场景,教程场景,教程B场景等)中tutorialMusic仅启动一次并连续播放,直到用户退回到主菜单。

    谢谢!

1 个答案:

答案 0 :(得分:2)

您可能想要做的是使用 Singleton 。这样,您就可以在应用内的任何位置使用声音播放器。

这可能符合您的需求:https://github.com/raywenderlich/SKTUtils/blob/master/SKTUtils/SKTAudio.swift(Ray Wenderlich)。

像这样使用:SKTAudio.sharedInstance().playBackgroundMusic(filename: yourTutorialMusicName)。然后在您的菜单中,您可以使用其他音乐再次调用它。

如果有帮助,请告诉我。