我在SceneKit中编写了一个函数,它将背景音乐作为带有键的节点上的动作播放,因此我可以使用键停止播放音乐
我有一个全局变量,所以我可以调用从类中的任何地方停止操作,(顺便说一下,这是SceneKit而不是SpriteKit,我仍然使用Swift作为语言)
var musicPlayingAction = SCNAction()
然而没有什么能阻止它,无论是forKey还是removeAllActions,如......
这没有任何作为
scnScene.rootNode.removeActionForKey("bgMusicKey")
所以我尝试更高级别并向下钻取,杀死场景,视图或节点上的所有动作(取决于我附加声音动作的位置)。
self.scnView.scene!.rootNode.removeAllActions()
仍然没有...
即使我在特定节点上运行声音动作并试图杀死它......你猜对了,或者我应该说音乐还在播放。
这是功能
func playMusic() {
if game.state == .Playing {
let music = SCNAudioSource(fileNamed: "art.scnassets/Sounds/BgMusic.mp3")!
music.volume = 0.3;
music.loops = true
music.shouldStream = true
music.positional = false
musicPlayingAction = SCNAction.playAudioSource(music, waitForCompletion: false)
scnScene.rootNode.runAction(musicPlayingAction, forKey: "bgMusicKey")
}
}
动作与音乐剧一样,但不会停止。
甚至可以将AudioSource作为动作停止,我知道你可以用Key停止动作,虽然这是我第一次试图用一个键停止音频SCNAction(注意不是SKAction)?
任何想法都表示赞赏,谢谢。
答案 0 :(得分:1)
解决!
删除了Action forKey ...
将我的游戏分解为场景,为每个场景添加游戏状态,然后加载依赖于状态和场景的背景音乐。场景。
感谢您的帮助,非常感谢=)
答案 1 :(得分:0)
有一个简单的答案
self.rootNode.removeAllAudioPlayers()
这将阻止所有音频播放器
答案 2 :(得分:0)
如果将声音作为操作添加到节点,则可以使用键删除此操作,如果将声音添加为音频播放器,则可以使用删除yourNode.removeAllAudioPlayers()