最近学习swift和SpriteKit,在处理背景音乐上遇到了一点问题,特此mark一下。
本来在游戏中,音效是使用SKAction来实现,于是乎最开始,我还是尝试使用SKAction来做背景音乐,可是却遇到了一点问题。
最开始的代码如下:
let playBGM = SKAction.playSoundFileNamed("background-music-aac.caf", waitForCompletion: true) self.runAction(SKAction.repeatActionForever(playBGM))
意思很明确,一直重复播放这个Action,但是实际运行时却发现,在游戏过程中,背景音乐确实正常播放了,但是,当企图暂停场景或者切换场景的时候,却发现背景音乐并没有立即暂停,而似乎是只是暂停了循环,但还是会把当前这一段播放完。
思前想后也不知道该怎么解决,于是乎,最后换成使用AVAudioPlayer,首先给工程加入AVFoundation.framework框架,然后生成一个AVAudioPlayer对象:
var bgmPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("background-music-aac", ofType: "caf")!), error: nil)
然后开始播放:
self.bgmPlayer.numberOfLoops = -1 self.bgmPlayer.play()
最后可以通过bgmPlayer.pause()来暂停,bgmPlayer.stop()来终止播放。