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

时间:2016-01-12 13:57:57

标签: ios swift sprite-kit

我的游戏中有背景音乐。我试图制作播放和暂停音乐的方法。

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

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

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

var SoundOnOff = SKSpriteNode(imageNamed: "MusicOn.png")

if (SoundOnOff.containsPoint(location)) {


        if BackgroundMusic.sharedHelper.isMuted() {
        //BackgroundMusic.sharedHelper.mute()
        BackgroundMusic.sharedHelper.pause()
        self.SoundOnOff.texture = SKTexture(imageNamed:"MusicOff.png")
        print("Music Off!")
        }
        else {
        //BackgroundMusic.sharedHelper.unmute()
        BackgroundMusic.sharedHelper.resume()
        self.SoundOnOff.texture = SKTexture(imageNamed:"MusicOn.png")
        print("Music On!")
        }
    }

BackgroundMusic Class(已编辑)

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
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的类是AVAudioPlayer的子类,但您实际上并没有使用自己的实例来播放音乐。当您使用BackgroundMusic.sharedHelper.playing时,您引用了类的实例,而不是实际播放的BgMusic播放器。由于您的课程没有使用任何声音文件进行初始化,我认为它无法正确处理.playing

答案 1 :(得分:-1)

我最近回答了一个类似的问题。我也使用自己的助手来制作类似于你的音乐。你的助手应该做一些不同的事情。

On and off music/sfx for sprite kit

GitHub:https://github.com/crashoverride777/Swift2-SpriteKit-Music-Helper