Swift Sound重播

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.它会使您的代码更容易让其他人阅读.)