Ios 如何在SpriteKit中播放和暂停音乐

Ios 如何在SpriteKit中播放和暂停音乐,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我的游戏中有背景音乐。我试图找到一种方法来播放和暂停音乐 当我按下播放/暂停音乐按钮时,我的应用程序崩溃 我不明白为什么它不起作用 主场景中的方法:(已编辑) 背景音乐课(已编辑) import AVFoundation class BackgroundMusic: NSObject { internal let localDefaults = NSUserDefaults.standardUserDefaults() static let sharedHelper = Backg

我的游戏中有背景音乐。我试图找到一种方法来播放和暂停音乐

当我按下播放/暂停音乐按钮时,我的应用程序崩溃

我不明白为什么它不起作用

主场景中的方法:(已编辑)

背景音乐课(已编辑)

import AVFoundation

class BackgroundMusic: NSObject {


  internal let localDefaults = NSUserDefaults.standardUserDefaults()
  static let sharedHelper = BackgroundMusic()
    var BgMusic: AVAudioPlayer?

    /// Keys
    internal struct Key {
        static let muted = "MusicMuteState"
    }


    override init() {
        super.init()
        print("Music helper init")
        playBackgroundMusic()

        if isMuted() {
            mute()
        }
    }

    func playBackgroundMusic() {
        let aSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Secrets of the Schoolyard", ofType: "mp3")!)
        do {
            BgMusic = try AVAudioPlayer(contentsOfURL:aSound)
            BgMusic!.numberOfLoops = -1
            BgMusic!.prepareToPlay()
            BgMusic!.play()
        } catch {
            print("Cannot play the file")
        }
    }

    func mute() {
        BgMusic!.volume = 0
        localDefaults.setBool(true, forKey: Key.muted)
    }

    /// Unmute
    func unmute() {
        BgMusic!.volume = 1
        localDefaults.setBool(false, forKey: Key.muted)
    }

    // Check mute state
    func isMuted() -> Bool {
        if localDefaults.boolForKey(Key.muted) {
            return true
        } else {
            return false
        }
    }
}

您的类是AVAudioPlayer的子类,但实际上您并没有使用自己的实例来播放音乐。使用BackgroundMusic.sharedHelper.playing时,您引用的是类的实例,而不是实际正在播放的BgMusic播放器。由于您的类尚未使用任何声音文件初始化,因此我认为它无法正确处理。最近,我回答了一个类似的问题。我也在使用我自己的音乐助手,这与你的类似。在助手中,您应该做一些不同的事情


GitHub:

用安全展开替换每次出现的强制展开(例如使用
if let…else…
),并捕获实际错误,而不仅仅是打印一个固定的句子。然后,您将能够找到错误并修复它。我检查了它,发现行有问题:BackgroundMusic.sharedHelper.Playing如果您仅针对iOS 9,您可以选择使用SkaudioNode。我想在iOS 8的AVFoundation中使用为什么不可以。我在使用这个助手,它的挑战性工作。检查我的github项目您是否解决了问题?你能把我的答案标记为正确吗
import AVFoundation

class BackgroundMusic: NSObject {


  internal let localDefaults = NSUserDefaults.standardUserDefaults()
  static let sharedHelper = BackgroundMusic()
    var BgMusic: AVAudioPlayer?

    /// Keys
    internal struct Key {
        static let muted = "MusicMuteState"
    }


    override init() {
        super.init()
        print("Music helper init")
        playBackgroundMusic()

        if isMuted() {
            mute()
        }
    }

    func playBackgroundMusic() {
        let aSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Secrets of the Schoolyard", ofType: "mp3")!)
        do {
            BgMusic = try AVAudioPlayer(contentsOfURL:aSound)
            BgMusic!.numberOfLoops = -1
            BgMusic!.prepareToPlay()
            BgMusic!.play()
        } catch {
            print("Cannot play the file")
        }
    }

    func mute() {
        BgMusic!.volume = 0
        localDefaults.setBool(true, forKey: Key.muted)
    }

    /// Unmute
    func unmute() {
        BgMusic!.volume = 1
        localDefaults.setBool(false, forKey: Key.muted)
    }

    // Check mute state
    func isMuted() -> Bool {
        if localDefaults.boolForKey(Key.muted) {
            return true
        } else {
            return false
        }
    }
}