【问题标题】:Stoping a sound as an action on a node with a key in SceneKit使用 SceneKit 中的键在节点上停止声音作为动作
【发布时间】:2019-03-28 22:49:54
【问题描述】:

我在 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 作为动作停止,我知道您可以使用键停止动作,尽管这是我第一次尝试使用键停止音频 SCNAction(注意不是 SKAction)???

任何想法表示赞赏,谢谢。

【问题讨论】:

    标签: audio action scenekit


    【解决方案1】:

    解决了!

    删除了操作 forKey...

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

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

    【讨论】:

      【解决方案2】:

      答案很简单

      self.rootNode.removeAllAudioPlayers() 
      

      这将停止所有音频播放器

      【讨论】:

        【解决方案3】:

        如果您将声音作为操作添加到节点,您可以使用 key 移除此操作,如果您将声音添加为音频播放器,您可以使用 remove a yourNode.removeAllAudioPlayers() 移除它

        【讨论】:

          猜你喜欢
          • 2018-07-09
          • 1970-01-01
          • 2012-11-07
          • 2016-04-27
          • 1970-01-01
          • 2011-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多