我在使用Sprite Kit时遇到问题,当我想在用户交互后播放声音时。
用户正在使用应用程序(例如Spotify)收听音乐 用户想要在他的歌曲中播放我的游戏,目前当使用启动我的应用程序时,他的歌曲就会停止。
我想阻止这种行为,事实上:如果其他应用使用“声音”,或者我如何播放声音并保持用户的音乐播放,我该怎么做才能播放声音。< / p>
目前这是我的代码:
@property (strong, nonatomic) SKAction *hitSound;
在init方法中:
_hitSound = [SKAction playSoundFileNamed:@"laugh.caf" waitForCompletion:NO];
用户按下屏幕后:
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
SKAction *sequence = [SKAction sequence:@[_hitSound]];
[node runAction:sequence completion:^{
//Stuff
}];
}
答案 0 :(得分:6)
您的应用需要管理 AVAudioSession ,以便继续播放背景音频。这将允许后台音频应用程序继续播放,您的应用程序声音将与它混合。
AVAudioSession 类是单例类,是 AVFoundation 框架的一部分。务必将 AVFoundation 与目标相关联。在需要它的类中导入框架。
#import <AVFoundation/AVFoundation.h>
声明应用程序音频会话的好地方在应用程序委托中,因此以下代码可以放在 application:didFinishLaunchingWithOptions:方法中。
// activate a mixable session
// set audio session category AVAudioSessionCategoryPlayback
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];
[[AVAudioSession sharedInstance] setMode:AVAudioSessionModeDefault error:nil];
[[AVAudioSession sharedInstance] setActive:YES error: nil];
就您自己的应用程序听起来与否一样,一种可能性是将 BOOL 类型的属性命名为 '静音' 并检查播放音频是否需要 SKAction 。您可以检查背景音频是否正在播放,并相应地设置 '静音' 属性。您还可以决定为设置此属性的用户提供界面。可能性很多。
您可以检查背景音频是否正在播放 -
BOOL isPlayingAudio = [[AVAudioSession sharedInstance] otherAudioPlaying];
从这里开始,您的代码可以决定将 self.mute 设置为。
在此处找到AVAudioSession 类引用 - AVAudioSession Class Reference