【发布时间】:2015-12-07 02:22:12
【问题描述】:
我试图弄清楚为什么 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: 的工作,直到应用程序重新启动。我唯一能做的就是从我的游戏中删除广告。如果他们碰巧收到带有音频的广告,我不能冒险让所有游戏音效失败的用户体验。我只希望用户不要接到电话。
标签: ios objective-c audio sprite-kit skaction