繁体   English   中英

如何停止另一个班级的SpriteKit游戏中的音乐

[英]How to stop music in a SpriteKit game from another class

我对如何访问和将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()可以解决问题。

从GameScene类过渡到MainMenu类时,应考虑在GameScene中停止音乐播放器。 您可以从MainMenu类再次开始音乐。

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

我通过声明全局变量并在每次按下静音按钮时增加全局变量来使其工作。 然后,我返回到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()
    }


}

目前,此方法有效,但我不确定即使用户关闭重新启动应用程序后也无法保持声音关闭。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM