使用SceneKit中的键停止声音作为节点上的操作

问题描述 投票:0回答:3

我在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)???

任何想法都赞赏,谢谢。

audio action scenekit
3个回答
1
投票

解决了!

删除了Action forKey ...

将我的游戏拆分为场景,为每个场景添加游戏状态,然后根据状态和场景加载背景音乐。

谢谢你的帮助,非常感谢=)


0
投票

有一个简单的答案

self.rootNode.removeAllAudioPlayers() 

这将阻止所有音频播放器


0
投票

如果你将声音作为一个动作添加到节点你可以用键删除这个动作,如果你添加声音作为音频播放器你可以删除它使用删除一个yourNode.removeAllAudioPlayers()

© www.soinside.com 2019 - 2024. All rights reserved.