Ios 如何立即结束一个声音?
我正在制作一个IOS游戏,背景音乐剪辑有7秒长,因此当场景从一个场景切换到下一个场景时,我希望它立即停止,但它会继续并完成7秒循环,然后停止。 代码如下: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
[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,您可以使用键创建该操作,并在更新循环的下一次迭代中删除该操作(通过键)。