我是 Sprite Kit 的新手,目前正在开发我的第一个游戏。 现在我想添加一些背景音乐(也许稍后还有一些效果),并用这段代码尝试一下:
func playBackgroundMusic() {
// 1 - Create player
let url = Bundle.main.url(forResource: "mySong", withExtension: "mp3")!
let player = try! AVAudioPlayer(contentsOf: url)
// 2 - Play sound
player.play()
}
但由于某种原因它不起作用。我注意到当我播放音乐然后运行游戏时,音乐停止了,但我听不到游戏音乐。
player
变量是 playBackgroundPlayer
函数的局部变量。当您开始播放音乐时,该功能退出。当函数退出时,player
不再存在。这可以解释为什么音乐停止了。
修复方法是将 AVAudioPlayer 的属性添加到包含
playBackgroundPlayer
函数的类或结构中。在初始化类或结构时创建 AVAudioPlayer 实例。在 play
中调用 playBackgroundPlayer
函数。
您还可以尝试使用 SKAction 来播放音乐:
https://developer.apple.com/documentation/spritekit/skaction/1417664-playsoundfilenamed
它可以工作,但目前有点问题。较大的 MP3 文件似乎会使游戏或应用程序崩溃。
我一直在使用一个 AVPlayer 单例作为背景音乐(2023 年 12 月),只是因为它更可靠。
但是,AVPlayer 无法与 iTunes 或 Apple Music 同时工作,因此理想情况下 SKAction 是 SpriteKit 未来版本中的首选方法。