繁体   English   中英

接到两个电话后,SKAction playSoundFileNamed不起作用

[英]SKAction playSoundFileNamed doesn't work after receiving two consecutive phone calls

我试图弄清楚为什么playSoundFileNamed在接到两个连续的电话后无效。 实际上它只在收到第一个电话后才有效。 再现步骤是:

  1. 开始游戏
  2. 等待电话并转到后台
  3. 电话已完成(被来电者拒绝或中断)
  4. 回到前台

在此之后,播放来自touchesBegan的声音仍然有效。

当我重复上面的步骤(跳过第一步)时,touchesBegan的机制停止工作。 不确定为什么会发生这种情况......以下是可以产生描述行为的代码:

@interface GameScene()

@property (nonatomic, strong) SKAction *sound;
@end

@implementation GameScene

-(void)didMoveToView:(SKView *)view {
    self.sound = [SKAction playSoundFileNamed:@"sound1.wav" waitForCompletion:NO];
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    /* Called when a touch begins */
    [self runAction:self.sound];
}
@end

我知道在SO上有一些与此相关的问题,但是给出的答案与解决方法有关。 我对解决方法不感兴趣,但为什么会发生这种情况呢? 它与AVAudioSession有什么关系吗? (可能不是)我知道我可以使用AVAudioPlayer作为一种解决方法,但仍然不确定播放大量简单短音的效果是多少......

关于应用程序在后台和前台之间进行转换,SKAction playSoundFileNamed是错误的。 这就是你遇到这个问题的原因。 我不确定iOS 9中是否已解决此问题。

至于解决方法,你说你不感兴趣,但我会包括一个完成的缘故。 使用AVAudioPlayer而不是SKAction。 AVAP能够根据您应用的状态停止和启动(使用其代理)。

这可能是混合音频的问题。 我发现启用混合音频不会在中断,广告视频播放或应用程序背景中停止SpriteKit的音频引擎。

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM