我希望我的SpriteKit
游戏不要中断用户收听的背景音乐(Music.app或广播应用)。
一切顺利,直到执行到达这一行:
sSharedShootSoundAction = [SKAction playSoundFileNamed:@"plane_shoot.aiff"
waitForCompletion:NO];
此线背景音乐停止后。怎么避免这个?
答案 0 :(得分:7)
我自己也遇到过这个问题。仅供参考我的解决方案很快,所以如果您还在使用它,请将其转换为目标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函数中放置以下代码行。 (不要忘记在您的APPDELEGATE中导入反对意见)。所以你的app delegate方法应该是这样的:
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
}
希望这能为你解决它,就像它对我一样!如果没有,请告诉我。
答案 1 :(得分: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
}