Ios 如何立即结束一个声音?

Ios 如何立即结束一个声音?,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我正在制作一个IOS游戏,背景音乐剪辑有7秒长,因此当场景从一个场景切换到下一个场景时,我希望它立即停止,但它会继续并完成7秒循环,然后停止。 代码如下: [self runAction:[SKAction repeatActionForever:[SKAction playSoundFileNamed:@"sound 1.m4a" waitForCompletion:YES]]]; if (_dead == YES) { [self removeAllActi

我正在制作一个IOS游戏,背景音乐剪辑有7秒长,因此当场景从一个场景切换到下一个场景时,我希望它立即停止,但它会继续并完成7秒循环,然后停止。 代码如下:

    [self runAction:[SKAction repeatActionForever:[SKAction playSoundFileNamed:@"sound 1.m4a" waitForCompletion:YES]]];
    if (_dead == YES) {

        [self removeAllActions];
    }
其中
\u dead
是当玩家死亡时,新场景被触发


我怎样才能让音乐停止那一瞬间,而不是结束它的循环

我建议使用AVFoundation,而不是使用SKAction来播放背景声音文件,它允许您简单地发出
stop
命令

更新

我想不出有哪本食品教程主要关注声音方面。大多数人处理视频和声音。试试谷歌的“AVFoundation教程”

要使用AVFoundation,您可以根据自己的目的执行此操作

将AVFoundation.framework添加到项目中

在.h文件中添加代理

在.m文件中导入

创建属性
AVAudioPlayer*\u 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:[nsstringwithformat:@“bgMusic.mp3”]

停止播放
[[u 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"];
要停止声音,请执行以下操作:

SKAction *mySound = [SKAction repeatActionForever:[SKAction playSoundFileNamed:@"astroKitty 1.m4a" waitForCompletion:YES]];
[self runAction:mySound withKey:@"boogieDown"];
[self removeActionForKey:@"boogieDown"];

我建议不要使用SKAction来播放背景声音文件,而是使用AVFoundation,它允许您简单地发出
stop
命令

更新

我想不出有哪本食品教程主要关注声音方面。大多数人处理视频和声音。试试谷歌的“AVFoundation教程”

要使用AVFoundation,您可以根据自己的目的执行此操作

将AVFoundation.framework添加到项目中

在.h文件中添加代理

在.m文件中导入

创建属性
AVAudioPlayer*\u 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:[nsstringwithformat:@“bgMusic.mp3”]

停止播放
[[u 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"];
要停止声音,请执行以下操作:

SKAction *mySound = [SKAction repeatActionForever:[SKAction playSoundFileNamed:@"astroKitty 1.m4a" waitForCompletion:YES]];
[self runAction:mySound withKey:@"boogieDown"];
[self removeActionForKey:@"boogieDown"];

几天前,你不是有一个类似的主题和完全相同的代码行吗?我不会用这么少的信息来回答一个主题。那么需要什么信息呢?我会假设这是唯一的信息,因为这是唯一一段处理背景音乐播放的代码,是的,我有一个类似的主题,使用相同的代码,我再问一次,因为没有人有一个解决方案@eltomatodid,几天前你不是有一个类似的主题,有完全相同的代码行吗?我不会用这么少的信息来回答一个主题。那么需要什么信息呢?我会假设这是唯一的信息,因为这是唯一一段处理背景音乐播放的代码,是的,我有一个类似的主题,使用相同的代码,我再次问,因为没有人有一个解决方案@eltomatoye,welcome。如果您在实现AVFoundation时遇到任何问题,请在此处留言。抱歉打扰,@sangony,但您知道关于此的任何好教程吗?我也建议使用AvaudioFundation,但如果您想使用SKAction,您可以使用键创建操作并删除操作(通过键)在更新循环的下一次迭代中。不客气。如果您在实现AVFoundation时遇到任何问题,请在此处留言。抱歉打扰您,@sangony,但您知道关于此问题的任何好教程吗?我也建议使用AvaudioFundation,但如果您想使用SKAction,您可以使用键创建该操作,并在更新循环的下一次迭代中删除该操作(通过键)。