静音和取消静音Swift Spritekit

时间:2017-04-13 07:48:20

标签: swift sprite-kit

我在MainMenuScene.swift文件中编写了以下代码,用于静音和取消静音背景音乐

var mute: Bool = false

 override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

     if nameOfTappedNode == "musicButton"{


            if mute {
                //This runs if the user wants music
                print("The button will now turn on music.")
                mute = false
                bgMusicPlayer?.volume = 1 //this is a .mp3 file
            } else {
                //This happens when the user doesn't want music
                print("the button will now turn off music.")
                mute = true
                bgMusicPlayer?.volume = 0
            }


}

我的问题是,如何将我游戏中每个场景中的每个.wav和.mp3文件静音?什么是最有效的方式?提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用Singleton实现:

final class AudioManager {

    static let instance = AudioManager()
    //you should initialize it approp
    private var player = //... initialize with whatever player you use 

    private init() { }

    func play(){
        player.play()
    }    
}

然后你需要的地方(来自每个班级):

 AudioManager.instance.play()
 AudioManager.instance.muteAll()
 AudioManager.instance.someOtherInstanceMethod()

答案 1 :(得分:0)

通过管理用于展示它们的AVAudioPlayer或玩家。

我保留了全球玩家阵列,当我想要影响游戏中的所有玩家时,只需迭代该阵列。例如:

var engineSound: AVAudioPlayer!
var shieldSound: AVAudioPlayer!
var photonSound1: AVAudioPlayer!
var photonSound2: AVAudioPlayer!
var photonSound3: AVAudioPlayer!
let arrayOfPlayers = [engineSound, shieldSound, photonSound1, photonSound2, photonSound3]

func fadeAllPlayers() {

    for player in arrayOfPlayers {

        player.volume = 0
    }
}

不同玩家阵列(而不是单个玩家)的优点之一是,您可以针对不同情况拥有多种行为。