为什么我的 SKAudioNode 给我一个错误?

Why is my SKAudioNode giving me an error?

使用 SKAudioNodeSKAction.play() 播放声音时出现以下错误:

2021-01-23 13:58:10.169108-0800 [AppNameHere][56755:10871021] [aurioc] AURemoteIO.h:323:entry: Unable to join I/O thread to workgroup ((null)): 2

声音 播放,但第一次播放时会导致应用 jump/skip/pause 片刻。所以,我收到一个伴随着暂停的错误。

这是我的代码,它位于从 didBegin(_ contact: SKPhysicsContact)

调用的函数中
//Load the sound
let audio = SKAudioNode(fileNamed: "clink.wav")

//Prevent the sound from looping infinitely                
audio.autoplayLooped = false

//Add the sound to the scene                
self.addChild(audio)

//Play the sound
let playAction = SKAction.play()
audio.run(playAction)

//Wait for 1 second so the sound can complete, then remove it from the scene
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
   audio.removeFromParent()
}

为什么会出现这个问题,我该如何解决?

感谢您的帮助!

更新:我显然需要“编辑问题以包括所需的行为、特定问题或错误,以及重现问题所需的最短代码.这将有助于其他人回答问题."

期望的行为:播放声音时应该没有错误,并且不会导致应用 jump/skip 片刻。

具体问题或错误:请参阅上面的错误。

重现问题所需的最短代码:请参阅上面的代码。

我还在代码中添加了注释来解释每一行的作用。

有多种方法可以实现此功能,如果您想使用 SKAudioNode,则可以执行以下操作。

在 GameScene 文件的顶部附近,创建一个变量:

var audio = SKAudioNode()

在“didMove(to view: SKView)”中添加以下行:

audio = SKAudioNode(fileNamed: "clink.wav")
audio.autoplayLooped = false
addChild(audio)

在您的函数中(在您的 didBegin(_ contact: SKPhysicsContact) 中调用),将以下行放入:

  let playAction = SKAction.play()
  let wait = SKAction.wait(forDuration: 1.0)
  let grp = SKAction.group([playAction, wait])
  let rfp = SKAction.removeFromParent()
  let sequence = SKAction.sequence([grp, rfp])
  audio.run(sequence)

通常,您不需要这种方法,但 SKAction.play() 似乎不适用于 completion: 块,因此我必须包括 1 秒的持续时间(这是你以前很高兴)。 那应该可以。

另一种更简单的方法是:

var audio: SKAction?

然后在 didMove(to view) 中输入:

audio = SKAction.playSoundFileNamed("Clink.wav", waitForCompletion: false)

然后在你的函数中输入:

  self.run(audio!, completion: {
    self.removeFromParent()
    })