为什么我的 SKAudioNode 给我一个错误?
Why is my SKAudioNode giving me an error?
使用 SKAudioNode
和 SKAction.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()
})
使用 SKAudioNode
和 SKAction.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()
})