无法从游戏场景,Swift 3 / Spritekit中停止背景音乐

气喘病

在XCODE 8 / Swift 3和Spritekit上,我正在播放背景音乐(5分钟的歌曲),是从GameViewController的ViewDidLoad(来自所有场景的父级,而不是来自特定的GameScene)调用它,因为我希望它可以在整个场景中播放不断变化。这毫无问题地发生。

但是我的问题是,当我进入场景时,如何随意停止背景音乐?说用户何时在第三场景的游戏中获得特定分数?由于我无法访问父文件的方法。这是我用来调用音乐播放的代码:

类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()

非常感谢您的帮助

crashoverride777

为什么不创建可以从任何地方访问的音乐帮助器类。单例方式或带有静态方法的类。这也应该使您的代码更整洁,更易于管理。

我还将设置方法和播放方法分开,这样您就不必在每次播放文件时都设置播放器。

例如辛格尔顿

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()

播放音乐。

要停止它,只需调用stop方法

MusicManager.shared.stop()

有关具有更多曲目的功能更丰富的示例,请查看我在GitHub上的帮助程序

https://github.com/crashoverride777/SwiftyMusic

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用SpriteKit滚动游戏场景

允许用户在Swift 2.0中使用背景音乐

将MP3添加到jquery中以播放背景音乐

如何用关卡游戏场景的屏幕快照替换关卡按钮图像?

如何将SpriteKit中的单个游戏场景添加到普通的Single View Swift应用程序中

Lan多人游戏场景变更

在我的玩家课堂中,我还是一个孩子制作了一个Hitbox Sprite。如何在游戏场景的didBegin方法中访问该Hitbox Sprite?

如何使用AVAudioPlayer在游戏中为多个场景暂停背景音乐

如何在游戏场景中从另一个类添加精灵

Unity-使用UI滑块通过场景播放背景音乐

为什么当我按“播放”时游戏场景为空?

在Swift(macOS)中控制背景音乐

如何在电晕中暂停游戏场景

如何在andengine中的游戏场景中添加背景音乐

如何停止在Xcode中播放不同类的背景音乐?

无法拦截SiriRemote上的“暂停”按钮-始终停止背景音乐,而从不恢复

onclick嵌入视频,背景音乐停止

Swift 2 Spritekit:游戏未暂停时,背景音乐无法恢复的问题

选择背景音乐是否停止

Swift Spritekit:背景音乐无法播放

当玩家再次玩游戏时,如何修复SpriteKit Swift上的共享按钮?共享按钮出现在游戏场景中吗?

游戏场景未更新

如何从游戏场景Swift中获取不同文件中的SKNode

如何从游戏场景中调用动作

我正在尝试为 Swift 3 中的每个视图控制器设置不同的背景音乐

在 Swift 中更改初始游戏场景

当我按下游戏场景上的按钮时,它开始游戏

数组中的游戏场景精灵节点

为8086拼装游戏添加背景音乐