从SKAction播放音乐

时间:2015-03-16 22:32:06

标签: ios swift sprite-kit

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

 var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
 runAction(SKAction.repeatActionForever(backgroundMusic), withKey: "music")

我知道waitForCompletion应设置为false以在您点按开关时停止音乐。但是当我把它设置为假时,音乐不会播放,就像静音一样。

self.removeActionForKey("music")

这是我用来停止音乐的代码。我很想知道你是否可以在音乐结束之前将音乐静音,或者在SpriteKit中还有另一种方式可以永久播放音乐。

2 个答案:

答案 0 :(得分:1)

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

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

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

https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKAction_Ref/index.html#//apple_ref/occ/clm/SKAction/playSoundFileNamed:waitForCompletion

您可以使用removeActionForKey停止播放音乐。

答案 1 :(得分:1)

我建议使用ObjectAL代替Spritekit作为背景音乐。或者这是我用于背景音乐的简单方法,借鉴SKUtils

-(AVAudioPlayer*)setupSound:(NSString*)file volume:(float)volume{
    NSError *error;
    NSURL *url = [[NSBundle mainBundle] URLForResource:file withExtension:nil];
    AVAudioPlayer *s = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    s.numberOfLoops = -1;
    s.volume = volume;
    [s prepareToPlay];
    return s;
}

然后你按如下方式调用它:

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