如何在另一个类的SpriteKit游戏中停止音乐

时间:2015-08-28 04:05:31

标签: ios audio sprite-kit

我很难理解如何从一个类访问和更改AVAudioPlayer变量到另一个类。

我有一个名为Gamescene的课程,它有:

 var backgroundMusicPlayer: AVAudioPlayer!

在代码中,我有

 func playBackgroundMusic(filename: String) {
    let url = NSBundle.mainBundle().URLForResource(
        filename, withExtension: nil)
    if (url == nil) {
        println("Could not find file: \(filename)")
        return
    }

    var error: NSError? = nil
    backgroundMusicPlayer =
        AVAudioPlayer(contentsOfURL: url, error: &error)
    if backgroundMusicPlayer == nil {
        println("Could not create audio player: \(error!)")
        return
    }

    backgroundMusicPlayer.numberOfLoops = -1
    backgroundMusicPlayer.prepareToPlay()
    backgroundMusicPlayer.play()



}

我无法弄清楚如何从主菜单类访问变量backgroundMusicPlayer。如果我可以访问它,我相信backgroundMusicPlayer.stop()会做到这一点。

2 个答案:

答案 0 :(得分:1)

当您从GameScene课程转换到MainMenu课程时,您应该考虑在GameScene中停止播放音乐播放器。您可以从MainMenu课程重新开始播放音乐。

如果由于某种原因您不希望这样做,请查看使用NSNotificationCenter在类之间发送消息。

答案 1 :(得分:0)

我通过声明一个全局变量并在每次按下静音按钮时递增全局变量来实现它。然后我回到playBackgroundMusic函数并添加了一个if语句。

func playBackgroundMusic(filename: String) {
    let url = NSBundle.mainBundle().URLForResource(
        filename, withExtension: nil)
    if (url == nil) {
        println("Could not find file: \(filename)")
        return
    }

    var error: NSError? = nil
    backgroundMusicPlayer =
        AVAudioPlayer(contentsOfURL: url, error: &error)
    if backgroundMusicPlayer == nil {
        println("Could not create audio player: \(error!)")
        return
    }



    backgroundMusicPlayer.numberOfLoops = -1
    backgroundMusicPlayer.prepareToPlay()
    backgroundMusicPlayer.play()

    if soundCount % 2 == 1
    {
        backgroundMusicPlayer.stop()
    }


}

现在可以使用,但即使用户关闭重启应用程序,我也不确定如何关闭声音。