ios - 如何立即结束声音?

标签 ios objective-c sprite-kit

我正在开发一款 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/

相关文章:

ios - 如何在 startWithGraphPath Facebook iOS 中标记好友

ios - Sprite-Kit - 如何制作文本丰富的弹出菜单?

ios - 执行从 GameScene 到主菜单的 Segue

ios - 在 Spritekit 中添加音效

ios - Firebase 数据过滤

ios - mvvmcross特定MvxViewController的ios锁定肖像方向

ios - 在 objective-c 中的方法之间传递值

objective-c - StoryBoard 中的 UIStepper 水平位置正确,但在运行的 App 中不正确

ios splitviewcontroller景观失败

ios - inout CGPoint * 作为参数意味着什么?