Sprite Kit:为什么播放声音 return 错误?

Sprite Kit: Why does playing sound return error?

我昨天将我的 Sprite Kit 游戏升级到 X-Code 8.0 和 Swift 3。部署目标当前设置为 iOS 9.3.

我是这样播放音效的:

self.run(SKAction.playSoundFileNamed("click.caf", waitForCompletion: false))

音效播放不正确(只有大约一半的样本),我得到以下错误(自升级到 X-Code 8.0 和 Swift 3):

SKAction: Error playing sound resource

有什么想法吗?

当我删除这个预加载代码后问题就消失了。你有类似的东西吗?但是现在我第一次播放声音时会有短暂的延迟。不知道该怎么处理。

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // Preload sounds
  [SKAction playSoundFileNamed:@"coinBlip.wav" waitForCompletion:NO];
  [SKAction playSoundFileNamed:@"bonus.wav" waitForCompletion:NO];
  :

My bug report (28350796) has been fixed now, and I've verified it on iOS 10.2 in beta simulator. So add a new bug report if your problems still exist on iOS 10.2!

我找到了适合我的解决方案。我使用计算的 SKAction 声音 属性 而不是预加载的声音:

var enemyCollisionSound: SKAction { return SKAction.playSoundFileNamed("hitCatLady.wav", waitForCompletion: false) }

我也有这个问题,我已经追踪到如果一个节点正在尝试播放声音并且它已经在其代码中创建了另一个对象的实例并且该对象已经预加载了音频代码,那么创建另一个的节点将不会播放它的声音。

遇到同样的问题,第一次播放某些声音时出现错误“SKAction:播放声音资源时出错”,我发现将声音的 SKAction 分配给“didMoveToView”中的空变量完全解决了问题我。

以通常最简单的方式声明声音动作:

let waterDropSoundAction = SKAction.playSoundFileNamed("WaterDrop.caf", waitForCompletion: false)

然后在 didMoveToView 中加载声音动作而不实际播放它:

let _ = waterDropSoundAction