我想弄清楚为什么playSoundFileNamed在接到两个连续的电话呼叫后不起作用。实际上,它只有在收到第一个电话后才有效。重现步骤是:SKAction playSoundFileNamed在收到两个连续的电话后不工作
- 开始游戏
- 等待一个电话,去背景
- 电话通话结束(拒绝或打断来电者)
- 回到前台
之后,播放声音从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作为解决方法,但仍然不知道播放大量简单的短音的性能有多高...
我刚才在处理这个问题。我从未找到解决方案。对我来说,它只需要一个电话。但是有一种更糟糕的情况,你可能也想检查一下。我使用的是iAd,每当有声音的广告(如战争游戏广告)被呈现时,这也会阻止playSoundFileNamed:从工作到应用程序重新启动。我唯一能做的就是从我的游戏中删除广告。我不能冒险让用户体验到所有游戏音效都会失败,如果他们碰巧收到一个带有音频的广告。我不得不希望用户不要打电话。 – Brad