【发布时间】:2014-10-19 15:35:16
【问题描述】:
在我用 Swift 编程的 SpriteKit iOS 游戏中播放非常短的声音(约 0.5 秒)会产生打嗝(如延迟)。在其他问题中,我读到我应该prepareToPlay() 声音,我做到了。
我什至使用了一个变量 (soundReady) 来检查声音在播放之前是否已准备好。每次播放完毕时,我都会重新准备声音 (audioPlayerDidFinishPlaying())。以下是代码的相关部分:
class GameScene: SKScene, AVAudioPlayerDelegate {
var splashSound = NSURL()
var audioPlayer = AVAudioPlayer()
var soundReady = false
override func didMoveToView(view: SKView) {
let path = NSBundle.mainBundle().pathForResource("plopSound", ofType: "m4a")
splashSound = NSURL(fileURLWithPath: path)
audioPlayer = AVAudioPlayer(contentsOfURL: splashSound, error: nil)
audioPlayer.delegate = self
soundReady = audioPlayer.prepareToPlay()
}
func playSound(){
if(soundReady){
audioPlayer.play()
soundReady = false
}
}
func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool){
//Prepare to play after Sound finished playing
soundReady = audioPlayer.prepareToPlay()
}
}
我不知道我在这个问题上哪里出错了。我感觉我什么都试过了(包括但不限于:只准备一次,玩完就准备,不使用变量,只使用prepareToPlay())。
附加信息:
- 声音立即播放。
- 在最后一次完成后播放声音的速度似乎不会影响延迟。
【问题讨论】:
-
不会像 UIViewController.ViewDidAppear() 那样触发 DidMoveToView 吗?也就是说,它只有在场景完全准备好后才会触发。 Apple 文档现在似乎很无聊,所以我会检查一下。
-
你试过在另一个线程上玩吗?
标签: ios audio swift avaudioplayer lag