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
}
Другие вопросы по тегам