如何立即结束声音?

时间:2014-04-05 02:39:30

标签: 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是玩家死亡时,并触发新场景。

如何让音乐停止那一瞬间,而不是完成它的循环?

1 个答案:

答案 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"];