Bet*_*ski 11 ios sprite-kit swift
我有这个功能,我在第一个场景中生活:
func ThemeSound() {
if let path = NSBundle.mainBundle().pathForResource("InfinityThemeMain", ofType: "wav") {
let enemy1sound = NSURL(fileURLWithPath:path)
println(enemy1sound)
var error:NSError?
ThemePlayer = AVAudioPlayer(contentsOfURL: enemy1sound, error: &error)
ThemePlayer.prepareToPlay()
ThemePlayer.play()
}
}
Run Code Online (Sandbox Code Playgroud)
但问题是,它只播放一次主题.我需要它重复播放.我以为我知道如何实现这一目标.
runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(ThemePlayer), SKAction.waitForDuration(2.55)]))
Run Code Online (Sandbox Code Playgroud)
但是我不能粘贴在ViewController中,因为runAction需要一个子连接它.我能用其他任何方式吗?
Mat*_*son 36
只需将numberOfLoops属性设置为负数即可.
ThemePlayer.numberOfLoops = -1
Run Code Online (Sandbox Code Playgroud)
从文档:
numberOfLoops声音在到达结尾时返回到开头重复播放的次数.
...
var numberOfLoops:Int
...
值为0(默认值)表示播放一次声音.设置正整数值以指定返回到开始并再次播放的次数.例如,指定值1会导致声音的总共两次播放.设置任何负整数值以无限循环声音,直到您调用stop方法.
您可能还需要使AVAudioPlayer成为属性,而不是局部变量.通过自动引用计数,我认为您的本地ThemePlayer实例可能会被ARC取消分配.比我更了解AVAudioPlayer的人可能会对此发表评论.
(顺便说一句,您可能希望遵循Apple的命名对象实例的惯例,以小写字母开头,themePlayer而不是ThemePlayer.它会使您的代码更容易让其他人阅读.)