我在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)???
任何想法都赞赏,谢谢。
解决了!
删除了Action forKey ...
将我的游戏拆分为场景,为每个场景添加游戏状态,然后根据状态和场景加载背景音乐。
谢谢你的帮助,非常感谢=)
有一个简单的答案
self.rootNode.removeAllAudioPlayers()
这将阻止所有音频播放器
如果你将声音作为一个动作添加到节点你可以用键删除这个动作,如果你添加声音作为音频播放器你可以删除它使用删除一个yourNode.removeAllAudioPlayers()