我正在制作IOS游戏,背景音乐片段长达7秒,所以当场景从一个场景变为另一个场景时,我希望它立即停止,但它会继续并完成7秒循环然后停下来。 这是代码:
[self runAction:[SKAction repeatActionForever:[SKAction playSoundFileNamed:@"sound 1.m4a" waitForCompletion:YES]]];
if (_dead == YES) {
[self removeAllActions];
}
其中_dead
是玩家死亡时,并触发新场景。
如何让音乐停止那一瞬间,而不是完成它的循环?
答案 0 :(得分:4)
我建议您使用AVFoundation,只需发出stop
命令,而不是使用SKAction播放背景声音文件。
更新
我无法想到任何主要关注声音方面的食物教程。大多数涉及视频和声音。尝试使用类似' AVFoundation教程'。
要使用AVFoundation,您可以为此目的执行此操作...
将AVFoundation.framework添加到您的项目中。
在.h文件中添加委托<AVAudioPlayerDelegate>
在您的.m文件#import <AVFoundation/AVFoundation.h>
创建属性AVAudioPlayer *_backgroundMusicPlayer;
创建此方法:
- (void)playBackgroundMusic:(NSString *)filename {
NSError *error;
NSURL *backgroundMusicURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
_backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
_backgroundMusicPlayer.numberOfLoops = -1;
_backgroundMusicPlayer.volume = 0.2;
_backgroundMusicPlayer.delegate = self;
[_backgroundMusicPlayer prepareToPlay];
[_backgroundMusicPlayer play];
}
开始播放[self playBackgroundMusic:[NSString stringWithFormat:@"bgMusic.mp3"]];
停止播放[_backgroundMusicPlayer stop];
这应该可以解决问题。我建议您阅读AVAudioPlayer类参考,以便了解其属性。例如,设置为-1的numberOfLoops
将无限循环声音,直到您调用stop
方法。要记住的另一个问题是音频文件声音格式。 AVFoundation对它将播放的声音文件有些挑剔。我总是坚持使用mp3。
Fuzzygoat也是一个很好的观点。我没有尝试过关于声音的方法,所以我不知道它是否会解决你的问题。它与你已经拥有的相似,只是略有改变。
开始发声:
SKAction *mySound = [SKAction repeatActionForever:[SKAction playSoundFileNamed:@"astroKitty 1.m4a" waitForCompletion:YES]];
[self runAction:mySound withKey:@"boogieDown"];
停止声音:
[self removeActionForKey:@"boogieDown"];