节点上的Swift SpriteKit声音

时间:2015-07-15 13:45:14

标签: swift sprite-kit

到目前为止,我发现有任何可能解决这个问题:

我试图将声音效果添加到特定节点。从父节点中删除节点时,声音应该停止。触摸节点时声音也应该停止。我用playSoundFileNamed(" name",waitForCompletion:false)尝试了它,但是你无法停止这个动作。

在后台播放AV音频播放器正在播放声音。

如果有人想要尝试一些新想法会很好。

2 个答案:

答案 0 :(得分:1)

简而言之,您无法停止使用SKAction播放的声音。正如您已经提到的那样,您可以使用AVAudioPlayer来实现此目的(在使用sfx时我不确定这个表演的性能)。或者您可以使用性能良好的ObjectAL库。 SKAction的playSoundFileNamed方法可能用于播放短音,但除了播放声音之外,您没有其他控制权。你不能暂停或恢复它或类似的东西。移除操作键也无助于在完成播放之前停止声音(例如,您无法在中间停止声音)。

您还可以查看iOS 9.0及更高版本中提供的SKAudioNode。有一个set of SKAction methods可以与SKAudioNode一起使用。 就个人而言,我还没有尝试过这些,但也许值得一看。

希望这有帮助。

答案 1 :(得分:0)

您可以尝试子类化SKAudioNode 您可以根据自己的喜好自定义spriteNode

import SpriteKit

class SoundSourceNode: SKNode {

    let spriteNode = SKSpriteNode(color: UIColor.greenColor(), size: CGSize(width: 20, height: 20))
    let audioNode = SKAudioNode(fileNamed: "Boing-One Low.mp3")

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    init(size: CGSize)
    {
        spriteNode.position = CGPoint(x: 0, y: 0)
        audioNode.positional = true
        audioNode.position = CGPoint(x: 0, y: 0)

        super.init()

        self.addChild(spriteNode);
        self.addChild(audioNode);
    }
}

请注意,{{1}}在iOS9及更高版本中可用