4

我希望我的SpriteKit游戏不会打断用户收听的背景音乐(Music.app 或广播应用)。

一切都很好,直到执行到达这一行:

sSharedShootSoundAction = [SKAction playSoundFileNamed:@"plane_shoot.aiff" 
                                     waitForCompletion:NO];

这条线后背景音乐停止。如何避免这种情况?

4

2 回答 2

7

我自己也遇到过这个问题。仅供参考,我的解决方案很快,所以如果您仍在使用它,只需将其转换为 Objective C。

对我来说,我的解决方案包括两个部分。首先,我必须在我的场景文件中的 didMoveToView 函数中初始化我的 SoundAction SKAction。所以你的场景文件应该是这样的:

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)。所以你的应用委托方法应该是这样的:

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
}

希望这能像对我一样为您解决问题!如果没有,请告诉我。

于 2015-03-21T08:52:06.130 回答
0

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
}
于 2019-09-30T14:12:00.427 回答