Ios 从一个动作中播放音乐

Ios 从一个动作中播放音乐,ios,swift,sprite-kit,Ios,Swift,Sprite Kit,我正在尝试为我的游戏添加背景音乐。我有一个将音乐静音的开关,当你再次点击它时,它将播放音乐。 这是播放音乐的代码 var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true) runAction(SKAction.repeatActionForever(backgroundMusic), withKey: "music") 我知道waitForCompletion应该

我正在尝试为我的游戏添加背景音乐。我有一个将音乐静音的开关,当你再次点击它时,它将播放音乐。 这是播放音乐的代码

 var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
 runAction(SKAction.repeatActionForever(backgroundMusic), withKey: "music")
我知道waitForCompletion应该设置为false,以便在您点击开关时停止音乐。但是当我把它设置为false时,音乐就不会播放,就像静态的声音一样

self.removeActionForKey("music")

这是我用来停止音乐的密码。我想知道你是否可以在曲目结束前将音乐静音,或者是否有其他方法可以在SpriteKit中永远播放音乐。

waitForCompletion
:如果
true
,此
操作的持续时间与音频播放的长度相同。如果
false
,则认为
操作已立即完成

waitForCompletion
设置为
false
,将创建持续时间为
0
的操作。因此,永久重复操作将无法正常运行。
您必须等待音乐播放的持续时间,然后才能从头开始播放,让音乐循环播放。因此,将
waitForCompletion
设置为
true

 var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
:


您可以使用
removeActionForKey
停止音乐

我建议在背景音乐中使用Spritekit而不是Spritekit。或者这里有一个我用来制作背景音乐的简单方法,借用自:

那么你可以这样称呼它:

...
AVAudioPlayer *bgplayer = [self setupSound:@"Background.wav" volume:1.0];
...
[bgplayer play];
...
[bgplayer pause];

你可能误解了waitForComplete的作用。如果这是真的,那么在声音文件的末尾,它会通知序列,或者forecreaction,它已经完成了,这样就可以再次播放。如果它是假的,那么它立刻告诉你永远的行动去做下一件事。你知道如何在斯威夫特中做到这一点吗?有没有办法阻止它,当它在播放的中间时,你可以通过使用<代码> ReaveActuoFrime来停止音乐。
...
AVAudioPlayer *bgplayer = [self setupSound:@"Background.wav" volume:1.0];
...
[bgplayer play];
...
[bgplayer pause];