【问题标题】:SpriteKit background music not looping foreverSpriteKit 背景音乐不会永远循环播放
【发布时间】:2016-07-22 13:57:11
【问题描述】:

我正在制作一个包含两个场景的简单 SpriteKit 游戏,我希望背景音乐无条件地循环播放两个场景。现在,我正在使用

if soundIsPlaying == false {
   runAction(SKAction.repeatActionForever(backgroundMusicEffect), withKey: "backgroundMusic")
   soundIsPlaying = true
}

在我的菜单场景中,backgroundMusicEffect 是一个全局变量

let backgroundMusicEffect = SKAction.playSoundFileNamed("content/divertimentoK131.mp3", waitForCompletion: true)

当我玩游戏时,音乐从不循环播放。它总是在播放一次后停止。如果我删除 if-else 语句,每次我重新进入菜单时,音乐都会自动播放。

有没有更好的播放背景音乐的方法?我做错了什么?

【问题讨论】:

标签: ios swift xcode sprite-kit skaction


【解决方案1】:

我相信你这样做的方式,在第一次循环之后,每次迭代都是“完成”的,因为声音完成了。如果要让它循环,每次都需要创建一个新的 SKAction 实例。

这当然是个坏主意,因为playSoundFileNamed 被设计为只播放一次声音文件,并且开销尽可能小。

正如@Alessandro Omano 所说,使用 SKAudioNode 来循环播放声音。这是我的首选方式,但您将自己限制为 >= iOS 9 用户。

如果您必须支持 iOS 8 用户(此时我会说为什么要打扰),那么您需要查看库的 AVFoundation 部分以获取音频,或使用 OpenAL。

【讨论】:

  • 谢谢,我已经按照@alessandro-ornano 的指南添加了使用 SKAudioNode,但是现在播放一秒钟后音乐崩溃了。有没有办法避免这种情况? (它也未能从一个场景转移到另一个场景)
  • 如果你想从一个场景转移到另一个场景,你需要把 AudioNode 转移到新的场景。至于崩溃,需要更多信息,我不确定@Alessandro Omano 的指南是做什么的,所以在这方面我无能为力..
猜你喜欢
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多