Я решил разорвать свои очень болезненные отношения с SKAction.playSoundFileNamed и перейти к использованию SKAudioNodes в нашем проекте - переломным моментом было их полное прерывание прерываниями без какой-либо согласованности.
Мы пытаемся создать расширение для SKAction, чтобы оно имитировало воспроизведение SKAudioNodes без добавления задержки, подобно тому, как для свойства waitForCompletion в playSoundFileNamed установлено значение false.Тем не менее, мы добавляем SKAudioNode, а затем удаляем его через короткий промежуток времени (3,0 с), но в расширении это добавит задержку в 3,0 с на любое действие.Я думаю, что мы должны иметь эту задержку, а затем удалить, потому что в противном случае мы будем накапливать SKAudioNode без необходимости.Вот наш текущий код:
func playAudioNode(node: SKSpriteNode?, sound: SoundType, delay: Double)
{
if node == nil
{
return
}
let audioNode = audioNodeDictionary[sound]!.copy() as! SKAudioNode
node!.addChild(audioNode)
let playSound = SKAction.run
{
audioNode.run(.play())
}
node!.run(SKAction.sequence([SKAction.wait(forDuration: delay), playSound, SKAction.wait(forDuration: 3.0), SKAction.removeFromParent()]))
}
Кто-нибудь использует SKAudioNodes аналогичным образом ad hoc и использует их в последовательностях SKAction, и есть какие-нибудь мысли о том, как лучше всего это реализовать?