我在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文件静音?什么是最有效的方式?提前谢谢!
答案 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
}
}
不同玩家阵列(而不是单个玩家)的优点之一是,您可以针对不同情况拥有多种行为。