如何停止从另一个类的SpriteKit游戏中的音乐
问题描述:
我很困难如何访问和更改AVAudioPlayer变量从一个类到另一个类。如何停止从另一个类的SpriteKit游戏中的音乐
我有一个名为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在类之间发送消息。
+0
主菜单目前不播放任何音乐。我希望能够从设置按钮中访问背景音乐,但NSNotification可能会起作用。 –
答
我通过声明一个全局变量并在每次按下静音按钮时递增全局变量来实现它。然后我回到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()
}
}
这适用于现在,但我不知道我怎么就能把音量调低,即使用户关闭了重新启动的应用程序。
您可以创建一个具有您当前'backgroundMusicPlayer'实例的单例类。检查这个答案:http://stackoverflow.com/questions/19086419/how-to-create-avplayer-singleton-class – WangYudong