SKAudioNode播放一次声音

时间:2015-12-18 14:58:35

标签: swift sprite-kit

我似乎无法找到有关SKAudioNode的更多信息。我怎么只播放一次声音?我不想重复声音。

我想要完成的是每次子弹产生时用spritekit播放一个短的激光声。

2 个答案:

答案 0 :(得分:10)

不幸的是,@ KnightOfDragon所说的不正确(但我没有足够的声誉来评论)。

SKAudioNode已在iOS 9中引入,可用作SKAction.playSoundFileNamed(...)的替代品,因为它更强大(您可以将其作为子项添加到SpriteKit SKNode,如果属性positional设置为true,自动添加3D音频混合。

要使用SKAudioNode播放一次声音,请使用以下代码:

if #available(iOS 9, *) {
    let pling = SKAudioNode(fileNamed: "pling.wav")
    // this is important (or else the scene starts to play the sound in 
    // an infinite loop right after adding the node to the scene).
    pling.autoplayLooped = false
    someNode.addChild(pling)
    someNode.runAction(SKAction.sequence([
        SKAction.waitForDuration(0.5),
        SKAction.runBlock {
            // this will start playing the pling once.
            pling.runAction(SKAction.play())
        }
    ])
}
else {
    // do it the old way
}

更新

看看这里,如何在音频节点上使用Actions:SKAction->Audio-Stuff。文档说:

  

使用SKAction playSoundFileNamed:waitForCompletion:仅用于短期杂费。   使用AVAudioPlayer可以长时间播放背景音乐。

意味着,SKAudioNode不应用于一次性音频。使用playSoundFileNamed,您无法更改音量或暂停/停止播放等等。

答案 1 :(得分:4)

如果您尝试进行声音效果,则在创建效果的精灵上使用SKAction.playSoundFileNamed(...)。 SKAudioNode更适合在游戏中播放音乐

示例:

//we have ship as an SKSpriteNode

//lets fire laser

ship.runAction(SKAction.playSoundFileNamed("pewpewpew.caf",waitForCompletion:false));