Swift / Spritekit:通过特定场景播放音乐

Posted

技术标签:

【中文标题】Swift / Spritekit:通过特定场景播放音乐【英文标题】:Swift / Spritekit: Play music through specific scenes 【发布时间】:2015-07-02 17:31:11 【问题描述】:

我有一个游戏,其中有几个教程场景。

我可以使用AVFoundationAVAudioPlayer() 为每个场景添加音乐。

我需要做的是能够在特定场景中启动音乐,并让它继续在后台播放相关场景。

例如:

    在教程菜单中启动tutorialMusic 在教程 A 中继续 tutorialMusic 在教程 B 中继续 tutorialMusic 在教程菜单中继续tutorialMusic 在主菜单中停止tutorialMusic 并播放mainMenuMusic

我的尝试

我尝试将AVAudioPlayer() 放在视图控制器中,但是我发现它会传播到每个场景,无论它是什么。我也无法找到视图控制器的 AVAudioPlayer 实例来阻止它。

我已经尝试将tutorialMusic 添加到每个教程场景中,但是每次用户打开不同的教程场景时都会重新启动音乐,这很草率,如果用户快速移动,它会降低性能并且真的很烦人.

我的问题

有没有办法在每个子教程场景中扩展主教程场景,以便AVAudioPlayer 的主实例可以访问并在每个教程中传播?

最终我想确保在每个部分(教程菜单场景、教程 A 场景、教程 B 场景等)中,tutorialMusic 仅启动一次并持续播放,直到用户退出回到主菜单。

谢谢!

【问题讨论】:

【参考方案1】:

您可能想要做的是使用 Singleton。这样做,您就可以在应用内的任何位置使用声音播放器。

这可能满足您的需求:https://github.com/raywenderlich/SKTUtils/blob/master/SKTUtils/SKTAudio.swift (Ray Wenderlich)。

像这样使用:SKTAudio.sharedInstance().playBackgroundMusic(filename: yourTutorialMusicName)。然后在你的菜单中你用你的其他音乐再次调用它。

如果有帮助,请告诉我。

【讨论】:

感谢您的建议!我会试一试,然后告诉你。

以上是关于Swift / Spritekit:通过特定场景播放音乐的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit + Swift - 如何通过缓动移动节点?

Swift,SpriteKit:如何保存场景的整个进度

Swift,SpriteKit:释放游戏场景并重新分配新场景

如何在不同的 SpriteKit 场景中显示 iAd 横幅

Swift:删除 Spritekit 中不同场景的广告

Swift:Spritekit 中的多个场景,从第二个和第一个场景的不同 Sprite 节点类型调用 touchesBegan