SKAction playSoundFileNamed не работает после двух последовательных телефонных звонков
Я пытаюсь понять, почему playSoundFileNamed не работает после двух последовательных телефонных звонков. На самом деле он работает только после того, как получен первый телефонный звонок. Шаги воспроизведения:
- Начать игру
- Дождитесь телефонного звонка и перейдите в фоновый режим.
- Телефонный вызов завершен (отклонен или прерван абонентом)
- Возврат на передний план
После этого воспроизведение звука с touchhesBegan по-прежнему работает.
Когда я повторяю шаги сверху (первый шаг пропускается), механизм от touchhesBegan перестает работать. Не знаю, почему это происходит... Вот код, который может привести к описанному поведению:
@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 в качестве обходного пути, но все же не уверен, насколько это исполнитель для воспроизведения множества простых коротких звуков...
Ответы
Ответ 1
SKAction playSoundFileNamed
является ошибкой в отношении перехода приложения между фоном и передним планом. Это причина, почему у вас эта проблема. Я не уверен, исправлена ли эта проблема в iOS 9.
Что касается обходного пути, вы заявили, что не заинтересованы, но я включу его для завершения. Используйте AVAudioPlayer вместо SKAction. AVAP имеет возможность останавливаться и запускаться (используя своих делегатов) в зависимости от состояния вашего приложения.
Ответ 2
Это может быть проблема со смешанным звуком. Я обнаружил, что включение смешанного звука больше не останавливает звуковой движок SpriteKit во время прерывания, воспроизведения видео в форматах или фонового рисунка приложения.
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)