Ios 如何在SpriteKit中播放和暂停音乐
我的游戏中有背景音乐。我试图找到一种方法来播放和暂停音乐 当我按下播放/暂停音乐按钮时,我的应用程序崩溃 我不明白为什么它不起作用 主场景中的方法:(已编辑) 背景音乐课(已编辑)Ios 如何在SpriteKit中播放和暂停音乐,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我的游戏中有背景音乐。我试图找到一种方法来播放和暂停音乐 当我按下播放/暂停音乐按钮时,我的应用程序崩溃 我不明白为什么它不起作用 主场景中的方法:(已编辑) 背景音乐课(已编辑) import AVFoundation class BackgroundMusic: NSObject { internal let localDefaults = NSUserDefaults.standardUserDefaults() static let sharedHelper = Backg
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
}
}
}
您的类是AVAudioPlayer的子类,但实际上您并没有使用自己的实例来播放音乐。使用BackgroundMusic.sharedHelper.playing时,您引用的是类的实例,而不是实际正在播放的BgMusic播放器。由于您的类尚未使用任何声音文件初始化,因此我认为它无法正确处理。最近,我回答了一个类似的问题。我也在使用我自己的音乐助手,这与你的类似。在助手中,您应该做一些不同的事情
GitHub:用安全展开替换每次出现的强制展开(例如使用
if let…else…
),并捕获实际错误,而不仅仅是打印一个固定的句子。然后,您将能够找到错误并修复它。我检查了它,发现行有问题:BackgroundMusic.sharedHelper.Playing如果您仅针对iOS 9,您可以选择使用SkaudioNode。我想在iOS 8的AVFoundation中使用为什么不可以。我在使用这个助手,它的挑战性工作。检查我的github项目您是否解决了问题?你能把我的答案标记为正确吗
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
}
}
}