我正在尝试为我的游戏添加背景音乐。我有一个可以使音乐静音的开关,当你再次点击它时,它会播放音乐。 这是播放音乐的代码
var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
runAction(SKAction.repeatActionForever(backgroundMusic), withKey: "music")
我知道waitForCompletion应设置为false以在您点按开关时停止音乐。但是当我把它设置为假时,音乐不会播放,就像静音一样。
self.removeActionForKey("music")
这是我用来停止音乐的代码。我很想知道你是否可以在音乐结束之前将音乐静音,或者在SpriteKit中还有另一种方式可以永久播放音乐。
答案 0 :(得分:1)
waitForCompletion
:如果true
,此action
的持续时间与音频播放的长度相同。如果false
,则action
被视为已立即完成。
将waitForCompletion
设置为false
,将创建一个持续时间为0
的操作。因此,重复永远行动将无法正常运作
您必须等待播放的持续时间才能从头开始播放,以便音乐循环播放。因此,将waitForCompletion
设置为true
,
var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
您可以使用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];