我似乎无法找到有关SKAudioNode的更多信息。我怎么只播放一次声音?我不想重复声音。
我想要完成的是每次子弹产生时用spritekit播放一个短的激光声。
答案 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));