SKAction playSoundFileNamed 在收到两个连续的 phone 调用后不起作用
SKAction playSoundFileNamed doesn't work after receiving two consecutive phone calls
我想弄清楚为什么 playSoundFileNamed 在收到两个连续的 phone 调用后不起作用。实际上,它仅在收到第一个 phone 呼叫后才起作用。重现步骤为:
- 开始游戏
- 等待 phone 调用并转到后台
- Phone 通话结束(被来电者拒绝或打断)
- 返回前台
在此之后,播放来自 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)
我想弄清楚为什么 playSoundFileNamed 在收到两个连续的 phone 调用后不起作用。实际上,它仅在收到第一个 phone 呼叫后才起作用。重现步骤为:
- 开始游戏
- 等待 phone 调用并转到后台
- Phone 通话结束(被来电者拒绝或打断)
- 返回前台
在此之后,播放来自 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)