SKAction playSoundFileNamed останавливает фоновую музыку
Я хочу мое SpriteKit
игра, чтобы не прерывать фоновую музыку, которую слушает пользователь (Music.app или радио приложение).
Все идет хорошо, пока исполнение не достигнет этой строки:
sSharedShootSoundAction = [SKAction playSoundFileNamed:@"plane_shoot.aiff"
waitForCompletion:NO];
После этой строки фоновая музыка останавливается. Как этого избежать?
1 ответ
Я тоже столкнулся с этой проблемой сам. К вашему сведению, мои решения быстрые, поэтому просто переведите это в Objective C, если вы все еще используете это.
Для меня мое решение состояло из двух частей. Сначала я должен был инициализировать SoundAction SKAction в моей функции didMoveToView в файле сцены. Итак, ваш файл сцены должен выглядеть примерно так:
import SpriteKit
import GameKit
import AVFoundation
class GameScene: SKScene, SKPhysicsContactDelegate {
var sSharedShootSoundAction: SKAction = SKAction()
override func didMoveToView(view: SKView) {
/* Setup your scene here */
sSharedShootSoundAction = SKAction.playSoundFileNamed("plane_shoot.aiff", waitForCompletion: false)
}
}
Затем в вашем файле AppDelegate вам нужно поместить следующую строку кода в ваше приложение didFinishLaunchingWithOptions. (НЕ ЗАБУДЬТЕ ИМПОРТИРОВАТЬ AVFOUNDATION В ВАШЕМ APPDELEGATE). Таким образом, ваш метод делегата приложения должен выглядеть примерно так:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
// INSERT THIS LINE BELOW.
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, error: nil)
return true
}
Надеюсь, это решит это для вас так же, как и для меня! Дайте мне знать, если это не так.
Обновление для Swift 5, Xcode 11: поместите это в AppDelegate:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// Below line will set all app sounds as ambient
try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.ambient)
return true
}