我在Swift工作,我有一个NSTimer从3,2,1倒数。我想每次这个定时器减少时播放一个音频文件,这样定时器就会显示3,音频会播放一次,然后翻到2,音频播放一次,最后播放到1,播放一次。
这就是我创建计时器并尝试这样做的方法:
var path2 = NSBundle.mainBundle().pathForResource("splatter1", ofType: "wav")
var soundTrack2 = AVAudioPlayer()
func timeToMoveOn() {
let loadingDelay = 0.01 * Double(NSEC_PER_SEC)
let loadingTime = dispatch_time(DISPATCH_TIME_NOW, Int64(loadingDelay))
dispatch_after(loadingTime, dispatch_get_main_queue()) {
//After delay
self.performSegueWithIdentifier("goToGameScene", sender: self)
}
}
func splatterSound() {
soundTrack2 = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path2!), error: nil)
soundTrack2.numberOfLoops = 1
soundTrack2.volume = 0.35
soundTrack2.play()
}
func updateCounter() {
countdownTestLabel.text = String(counter--)
splatterSound()
if counter == 0 {
countdown.invalidate()
//Then trigger segue to Game Scene view
timeToMoveOn()
}
}
在视图中加载:
counter = 3
countdown = NSTimer.scheduledTimerWithTimeInterval(1, target:self, selector: Selector("updateCounter"), userInfo: nil, repeats: true)
我的问题是每次定时器递减时音频文件都会播放,但它会播放多次。例如,它将一次,然后第二次,然后第三次第四次和第五次全部快速连续。它不应该这样做。
如何解决此问题,以便仅在计时器减少时播放?
答案 0 :(得分:0)
摆脱soundTrack2.numberOfLoops = 1
位。 numberOfLoops
设置是重复声音的次数。因此,当您的计时器第一次触发时,您会将声音排队连续播放两次。
然后一秒钟之后,你将声音排队再次连续播放两次。
然后,一秒钟之后,你将你的声音排成队,连续两次播放。
如果您消除该行,声音将默认为numberOfLoops=0
,或者只播放一次声音(这就是您想要的声音。)