如何使用SpriteKit和Swift停止播放音效?

时间:2015-02-18 06:09:43

标签: ios swift audio

我正在为我的侄女写一本故事书应用程序,我有一个关于SpriteKit的问题。我正在设置它,以便播放不同类型的音频。

  1. 循环的背景音乐(AVFoundation)
  2. 在新页面上播放时的叙述,或按叙述按钮重播叙述时的叙述(SKAction)
  3. 我的问题是,如果用户更改页面,或者用户播放重播旁白按钮,则旁白将在彼此之上播放。所以最终听起来像是两个人互相交谈。

    如何在触发新旁白时停止正在播放的所有旁白?

    我在互联网上找不到任何相关帮助。我看过一些帖子说我们AVFoundation,但是从我的理解(虽然有限)看来更像是背景音乐而且只能播放一首曲目。

    我是否误解了文档?有人可以帮我解答这个问题吗?

    import SpriteKit
    

    导入AVFoundation

    课程第1页:SKScene {

    // MARK: Touch handling
    
    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        /* Called when a touch begins */
    
        for touch: AnyObject in touches {
            let location = touch.locationInNode(self)
            println("\(location)")
    
            //checks if someone touched the menu button
            if menuButton.containsPoint(location) {
                println("Play story with sound!")
                settings.setInProgress()
                goToPauseMenu()
            }
    
            if soundButton.containsPoint(location) {
                println("Play story with sound!")
                settings.setInProgress()
                runAction(playNar)
            }
    
            //checks if someone touched the forward button
            if pageForward.containsPoint(location) {
                println("Next Page!")
                settings.setInProgress()
                nextPage()
            }
    
        }
    }
    

2 个答案:

答案 0 :(得分:1)

您的阅读建议使用AVFoundation是一个很好的建议。我不会将AVFoundation描述为背景音乐。

是的,您只能使用AVAudioPlayer实例一次播放一个流,但是如果您的需求需要,您可以让多个AVAudioPlayers实例播放不同(或相同)的流。相对于AVFoundation的控件,SpritKit的音频动作非常有限,除了最基本的要求外,它们几乎无用。

我发现自己,在一个利用SKActions声音的项目的早期,但我不可避免地需要对音频进行更细粒度的控制(即音量控制,在播放中间停止等等)并最终使用AVAudioPlayer。

答案 1 :(得分:0)

如果你想用精灵套件动作停止声音效果,你需要做的是将一个子节点添加到主节点,让子节点播放音频声音,然后暂停子节点本身