SKAction playSoundFileNamed在接到两个连续的电话后不起作用

我试图找出为什么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 

我知道有一些与此相关的问题,但给出的答案与解决方法有关。 我对解决方法不感兴趣,而是为什么会发生这种情况? 它是否与AVAudioSession有关? (可能不是)我知道我可以使用AVAudioPlayer作为一种解决方法,但仍然不知道该演奏很多简单的短音的性能是多less…

SKAction playSoundFileNamed是关于应用程序在背景和前景之间转换的错误。 这就是你有这个问题的原因。 我不确定这个问题是否已在iOS 9中得到纠正。

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

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

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