无法停止游戏场景中的背景音乐,Swift 3/Spritekit
Cannot stop background music from within Game Scenes, Swift 3/Spritekit
在 XCODE 8/Swift 3 和 Spritekit 上,我正在播放背景音乐(一首 5 分钟的歌曲),从 GameViewController 的 ViewDidLoad 调用它(来自所有场景的父级,而不是来自特定的 GameScene),因为我希望它在整个场景变化过程中不停地播放。这没有问题。
但我的问题是,当我在场景中时,如何随意停止背景音乐?说当用户在第 3 个场景中获得特定分数时?因为我无法访问父文件的方法。这是我用来调用音乐播放的代码:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var audioPlayer = AVAudioPlayer()
do {
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!))
audioPlayer.prepareToPlay()
} catch {
print (error)
}
audioPlayer.play()
非常感谢您的帮助
为什么不创建一个您可以从任何地方访问的音乐助手class。单例方式或带有静态方法的 class 。这还应该使您的代码更清晰、更易于管理。
我还会将设置方法和播放方法分开,这样您就不必在每次播放文件时都设置播放器。
例如单例
class MusicManager {
static let shared = MusicManager()
var audioPlayer = AVAudioPlayer()
private init() { } // private singleton init
func setup() {
do {
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!))
audioPlayer.prepareToPlay()
} catch {
print (error)
}
}
func play() {
audioPlayer.play()
}
func stop() {
audioPlayer.stop()
audioPlayer.currentTime = 0 // I usually reset the song when I stop it. To pause it create another method and call the pause() method on the audioPlayer.
audioPlayer.prepareToPlay()
}
}
当您的项目启动时,只需调用设置方法
MusicManager.shared.setup()
你可以在项目的任何地方说
MusicManager.shared.play()
播放音乐。
要停止它,只需调用停止方法
MusicManager.shared.stop()
有关多轨的功能更丰富的示例,请查看我在 GitHub
上的助手
https://github.com/crashoverride777/SwiftyMusic
希望对您有所帮助
在 XCODE 8/Swift 3 和 Spritekit 上,我正在播放背景音乐(一首 5 分钟的歌曲),从 GameViewController 的 ViewDidLoad 调用它(来自所有场景的父级,而不是来自特定的 GameScene),因为我希望它在整个场景变化过程中不停地播放。这没有问题。
但我的问题是,当我在场景中时,如何随意停止背景音乐?说当用户在第 3 个场景中获得特定分数时?因为我无法访问父文件的方法。这是我用来调用音乐播放的代码:
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var audioPlayer = AVAudioPlayer()
do {
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!))
audioPlayer.prepareToPlay()
} catch {
print (error)
}
audioPlayer.play()
非常感谢您的帮助
为什么不创建一个您可以从任何地方访问的音乐助手class。单例方式或带有静态方法的 class 。这还应该使您的代码更清晰、更易于管理。
我还会将设置方法和播放方法分开,这样您就不必在每次播放文件时都设置播放器。
例如单例
class MusicManager {
static let shared = MusicManager()
var audioPlayer = AVAudioPlayer()
private init() { } // private singleton init
func setup() {
do {
audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!))
audioPlayer.prepareToPlay()
} catch {
print (error)
}
}
func play() {
audioPlayer.play()
}
func stop() {
audioPlayer.stop()
audioPlayer.currentTime = 0 // I usually reset the song when I stop it. To pause it create another method and call the pause() method on the audioPlayer.
audioPlayer.prepareToPlay()
}
}
当您的项目启动时,只需调用设置方法
MusicManager.shared.setup()
你可以在项目的任何地方说
MusicManager.shared.play()
播放音乐。
要停止它,只需调用停止方法
MusicManager.shared.stop()
有关多轨的功能更丰富的示例,请查看我在 GitHub
上的助手https://github.com/crashoverride777/SwiftyMusic
希望对您有所帮助