我正在开发一款 IOS 游戏,背景音乐剪辑为 7 秒长,所以当场景从一个场景切换到下一个场景时,我希望它立即停止,但它会继续并完成 7 秒循环然后停止。
这是代码:
[self runAction:[SKAction repeatActionForever:[SKAction playSoundFileNamed:@"sound 1.m4a" waitForCompletion:YES]]];
if (_dead == YES) {
[self removeAllActions];
}
在哪里
_dead
是当玩家死亡时,新场景被触发。我怎样才能让音乐停止那一刻,而不是完成它的循环?
最佳答案
我建议不要使用 SKAction 播放背景声音文件,而是使用 AVFoundation,它允许您简单地发出 stop
命令。
更新
我想不出任何主要关注声音方面的食品教程。大多数处理视频和声音。尝试使用“AVFoundation 教程”之类的 google。
要使用 AVFoundation,您可以为您的目的执行此操作...
将 AVFoundation.framework 添加到您的项目中。
在您的 .h 文件中添加委托(delegate) <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 类引用,以便了解它的属性。例如,
numberOfLoops
设置为 -1 将无限循环播放声音,直到您调用 stop
方法。要记住的另一个问题是音频文件的声音格式。 AVFoundation 对播放的声音文件有些挑剔。我总是坚持 mp3。Fuzzygoat 也提出了一个很好的观点。我没有尝试过他关于声音的方法,所以我不知道它是否能解决你的问题。它与您已经拥有的类似,但略有变化。
要启动声音:
SKAction *mySound = [SKAction repeatActionForever:[SKAction playSoundFileNamed:@"astroKitty 1.m4a" waitForCompletion:YES]];
[self runAction:mySound withKey:@"boogieDown"];
停止声音:
[self removeActionForKey:@"boogieDown"];
关于ios - 如何立即结束声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22875934/