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

Whi*_*ind 11 audio objective-c ios sprite-kit skaction

我试图弄清楚为什么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
Run Code Online (Sandbox Code Playgroud)

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

san*_*ony 2

SKActionplaySoundFileNamed在应用程序在后台和前台之间转换方面存在错误。这就是您遇到此问题的原因。我不确定这个问题是否在 iOS 9 中得到了解决。

至于解决方法,您表示您不感兴趣,但为了完成目的,我将添加一个解决方法。使用 AVAudioPlayer 而不是 SKAction。AVAP 能够根据您的应用程序的状态停止和启动(使用其委托)。