我制作了一个包含两个场景的简单SpriteKit游戏,我希望背景音乐能无条件地在两个场景中循环播放。现在,我正在使用
if soundIsPlaying == false {
runAction(SKAction.repeatActionForever(backgroundMusicEffect), withKey: "backgroundMusic")
soundIsPlaying = true
}
在我的菜单场景中backgroundMusicEffect
是一个全局变量
let backgroundMusicEffect = SKAction.playSoundFileNamed("content/divertimentoK131.mp3", waitForCompletion: true)
当我玩游戏时,音乐永远不会循环。它总是在一场比赛后停止。如果我删除if-else语句,每次重新进入菜单时音乐都会自动播放。
有没有更好的方式播放背景音乐?我做错了什么?
答案 0 :(得分:1)
我相信你这样做的方式,在第一次循环之后,之后的每次迭代都是"完成"因为声音已经完成。如果你想让它循环,你需要每次都创建一个新的SKAction实例。
这当然是一个坏主意,因为playSoundFileNamed
的目的是只播放一次声音文件,尽可能少。“
正如@Alessandro Omano评论的那样,使用SKAudioNode来循环播放声音。这是我首选的方法,但您将自己限制为> = iOS 9用户。
如果你必须支持iOS 8用户(此时我会说为什么要这么麻烦)那么你需要查看libs的AVFoundation部分以获得音频,或者使用OpenAL。