Не должно быть лагов, потому что я настраиваю и предварительно загружаю каждый звук в viewDidLoad()
перед воспроизведением.
class GameViewController: UIViewController {
private var sounds = [String: SCNAudioSource]()
override func viewDidLoad() {
super.viewDidLoad()
loadAllSounds()
}
}
extension GameViewController {
private func loadSound(name: String, path: String) {
if let sound = SCNAudioSource(fileNamed: path) {
sound.isPositional = false
sound.volume = 0.8
sound.shouldStream = false
// Loads audio data from the source and prepares it for playing
sound.load()
sounds[name] = sound
}
}
private func loadAllSounds() {
loadSound(name: "Whoosh", path: "whoosh.wav")
loadSound(name: "Pop", path: "pop.wav")
loadSound(name: "Slide", path: "slide.wav")
}
}
Для воспроизведения звуков у меня есть функция playSound()
. Эта функция вызывается в зависимости от событий в игре. Например, когда игрок прыгает. Таким образом, задержка возникает только при первом воспроизведении каждого звука.
private func playSound(withName name: String, atNode node: SCNNode) {
let playAudio = SCNAction.playAudio(sounds[name]!, waitForCompletion: false)
node.runAction(playAudio)
}
Похоже, SCNAudioSource.load () не загружает и не подготавливает звуки. Либо я делаю что-то не так.
Буду рад любой помощи. Спасибо!