SpriteKit 覆盖音频文件

SpriteKit overlaying audio file

我正在尝试为我的游戏设置一个背景音乐,它应该从 Home 场景开始,然后即使在其他场景中也不断循环。

这是我的 class 的样子:

class AudioPlayer: AVAudioPlayer {
var audioPlayer: AVAudioPlayer? = AVAudioPlayer()
let ost = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("bkg", ofType: "mp3")!)

func playOst() {
        do {
            audioPlayer = try AVAudioPlayer(contentsOfURL: ost)
        }
        catch {
            audioPlayer = nil
        }
        audioPlayer?.prepareToPlay()
        audioPlayer!.play()
        audioPlayer!.numberOfLoops = -1
}

func stopOst() {
    audioPlayer!.stop()
}

因为我把play方法放在了home场景中,每次加载它都会开始播放新的曲目,一首曲子叠加在另一首曲子上,导致一团糟。我该如何预防?

让你的音频播放器class成为一个单例,或者让 AppDelegate 来管理它。这也将允许您随时从您的应用程序中的任何 scene/screen 控制音乐。

每当您的主屏幕加载时,检查音乐是否已在播放,如果没有,请调用 playOst,否则什么都不做。