我的游戏中有背景音乐。我试图制作播放和暂停音乐的方法。
当我按下播放/暂停音乐按钮时,我的应用程序崩溃。
我不明白为什么它不起作用。
主场景中的方法:(已编辑)
var SoundOnOff = SKSpriteNode(imageNamed: "MusicOn.png")
if (SoundOnOff.containsPoint(location)) {
if BackgroundMusic.sharedHelper.isMuted() {
//BackgroundMusic.sharedHelper.mute()
BackgroundMusic.sharedHelper.pause()
self.SoundOnOff.texture = SKTexture(imageNamed:"MusicOff.png")
print("Music Off!")
}
else {
//BackgroundMusic.sharedHelper.unmute()
BackgroundMusic.sharedHelper.resume()
self.SoundOnOff.texture = SKTexture(imageNamed:"MusicOn.png")
print("Music On!")
}
}
BackgroundMusic Class(已编辑)
import AVFoundation
class BackgroundMusic: NSObject {
internal let localDefaults = NSUserDefaults.standardUserDefaults()
static let sharedHelper = BackgroundMusic()
var BgMusic: AVAudioPlayer?
/// Keys
internal struct Key {
static let muted = "MusicMuteState"
}
override init() {
super.init()
print("Music helper init")
playBackgroundMusic()
if isMuted() {
mute()
}
}
func playBackgroundMusic() {
let aSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Secrets of the Schoolyard", ofType: "mp3")!)
do {
BgMusic = try AVAudioPlayer(contentsOfURL:aSound)
BgMusic!.numberOfLoops = -1
BgMusic!.prepareToPlay()
BgMusic!.play()
} catch {
print("Cannot play the file")
}
}
func mute() {
BgMusic!.volume = 0
localDefaults.setBool(true, forKey: Key.muted)
}
/// Unmute
func unmute() {
BgMusic!.volume = 1
localDefaults.setBool(false, forKey: Key.muted)
}
// Check mute state
func isMuted() -> Bool {
if localDefaults.boolForKey(Key.muted) {
return true
} else {
return false
}
}
}
答案 0 :(得分:0)
您的类是AVAudioPlayer的子类,但您实际上并没有使用自己的实例来播放音乐。当您使用BackgroundMusic.sharedHelper.playing时,您引用了类的实例,而不是实际播放的BgMusic播放器。由于您的课程没有使用任何声音文件进行初始化,我认为它无法正确处理.playing
答案 1 :(得分:-1)
我最近回答了一个类似的问题。我也使用自己的助手来制作类似于你的音乐。你的助手应该做一些不同的事情。
On and off music/sfx for sprite kit
GitHub:https://github.com/crashoverride777/Swift2-SpriteKit-Music-Helper