SpriteKit 覆盖音频文件

Posted

技术标签:

【中文标题】SpriteKit 覆盖音频文件【英文标题】:SpriteKit overlaying audio file 【发布时间】:2015-10-15 14:10:48 【问题描述】:

我正在尝试为我的游戏设置背景铃声,该铃声应该从 Home 场景开始,然后在其他场景中连续循环播放。

这就是我的班级的样子:

class AudioPlayer: AVAudioPlayer 
var audioPlayer: AVAudioPlayer? = AVAudioPlayer()
let ost = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("bkg", ofType: "mp3")!)

func playOst() 
        do 
            audioPlayer = try AVAudioPlayer(contentsOfURL: ost)
        
        catch 
            audioPlayer = nil
        
        audioPlayer?.prepareToPlay()
        audioPlayer!.play()
        audioPlayer!.numberOfLoops = -1


func stopOst() 
    audioPlayer!.stop()

由于我将播放方法放在家庭场景中,每次加载时它都会开始播放新曲目,将一个曲目覆盖在另一个曲目上,导致一团糟。如何预防?

【问题讨论】:

【参考方案1】:

让你的音频播放器类成为一个单例,或者让 AppDelegate 照顾它。这也将允许您随时从应用中的任何场景/屏幕控制音乐。

每当您的主屏幕加载时,检查音乐是否已经在播放,如果没有,则调用 playOst,否则什么也不做。

【讨论】:

谢谢!我已经用 audioPlayer.playing 布尔值和单例类解决了这个问题

以上是关于SpriteKit 覆盖音频文件的主要内容,如果未能解决你的问题,请参考以下文章

从 SpriteKit 中的类播放音频

如何防止 SceneKit 中的 SpriteKit 覆盖拉伸?

在 Spritekit Swift 中停止音频

在不同的 UIKit 和 SpriteKit 场景中连续播放音频

覆盖 SpriteKit 中的碰撞

Swift 3:通过覆盖 SKView 在 SpriteKit 中制作暂停菜单?