Spritekit保持iPhone音乐游戏时
问题描述:
播放的声音和音乐,我同时使用SKAction.playSoundFileNamed
和AVAudioPlayer
。Spritekit保持iPhone音乐游戏时
如果我打在我的iPhone的音乐,我会打开我的游戏,我的游戏停止音乐。如果我打开另一场比赛,音乐不会停止。
任何人都知道如何仍是音乐播放?
我的声音管理器类为:
class SoundManager {
static let sharedInstance = SoundManager()
/// Short Incidental Sound SKAction
let coin = SKAction.playSoundFileNamed("coin.wav", waitForCompletion: false)
let newLevel = SKAction.playSoundFileNamed("newLevel.wav", waitForCompletion: true)
let blup = SKAction.playSoundFileNamed("singleWater.wav", waitForCompletion: true)
let pop = SKAction.playSoundFileNamed("estrazionePop" + ".wav", waitForCompletion: true)
let pip = SKAction.playSoundFileNamed("estrazionePip" + ".wav", waitForCompletion: true)
let split = SKAction.playSoundFileNamed("split" + ".mp3", waitForCompletion: true)
let fire = SKAction.playSoundFileNamed("fire" + ".wav", waitForCompletion: true)
let stoneStop = SKAction.playSoundFileNamed("stoneStop" + ".wav", waitForCompletion: true)
let small = SKAction.playSoundFileNamed("BvS-Exp-Small" + ".wav", waitForCompletion: true)
let medium = SKAction.playSoundFileNamed("BvS-Exp-Medium" + ".wav", waitForCompletion: true)
let big = SKAction.playSoundFileNamed("BvS-Exp-Big" + ".wav", waitForCompletion: true)
let smallBoss = SKAction.playSoundFileNamed("BvS-Exp-Boss-Small" + ".wav", waitForCompletion: true)
let mediumBoss = SKAction.playSoundFileNamed("BvS-Exp-Boss-Medium" + ".wav", waitForCompletion: true)
let bigBoss = SKAction.playSoundFileNamed("BvS-Exp-Boss-Big" + ".wav", waitForCompletion: true)
let bombInizio = SKAction.playSoundFileNamed("BombInizio" + ".wav", waitForCompletion: true)
let bombScintilla:SKAudio = SKAudio(fileName: "BombScintilla" + ".wav", numberOfLoops: -1)
let bombBoom = SKAction.playSoundFileNamed("BombBoom" + ".wav", waitForCompletion: true)
let spiderSvamp = [
SKAction.playSoundFileNamed("Fhh0" + ".wav", waitForCompletion: true),
//SKAction.playSoundFileNamed("Fhh1" + ".wav", waitForCompletion: true), non mi piacciono
//SKAction.playSoundFileNamed("Fhh2" + ".wav", waitForCompletion: true),
SKAction.playSoundFileNamed("Fhh3" + ".wav", waitForCompletion: true),
SKAction.playSoundFileNamed("Fhh4" + ".wav", waitForCompletion: true),
SKAction.playSoundFileNamed("Fhh5" + ".wav", waitForCompletion: true)
]
///Suoni lunghi
var gameover: SKAudio = SKAudio(fileName: "gameover" + ".mp3", numberOfLoops: 0)
}
和
class SKAudio {
var audio: AVAudioPlayer!
var url: URL?
fileprivate var numberOfLoops:Int!
///-1 infinite, 0 = once
init(fileName: String, numberOfLoops:Int? = -1) {
url = Bundle.main.url(forResource: fileName, withExtension: nil)
self.numberOfLoops = numberOfLoops
}
func playSound() {
if (url == nil) {
print("Could not find the file \(audio)")
}
do {
audio = try AVAudioPlayer(contentsOf: url!, fileTypeHint: nil)
}
catch let error as NSError { print(error.debugDescription)
}
if audio == nil {
print("Could not create audio player")
}
else {
audio.prepareToPlay()
audio.numberOfLoops = numberOfLoops
audio.play()
}
}
func pause() {
if let player = audio {
if player.isPlaying {
player.pause()
}
}
}
func resume() {
if let player = audio {
if !player.isPlaying {
player.play()
}
}
}
func stop() {
if let player = audio {
if player.isPlaying {
player.stop()
}
}
}
func isPlaying() -> Bool {
if let player = audio {
return player.isPlaying
}
else {
return false
}
}
func increaseVolume(value:Float) {
if let player = audio {
if player.isPlaying {
if player.volume != 1.0 {
let incrrease = min(value, 1.0)
player.volume += incrrease
}
}
}
}
func decreaseVolume(value:Float) {
if let player = audio {
if player.isPlaying {
if player.volume != 0.0 {
let decr = max(value, 0.0)
player.volume -= decr
}
}
}
}
func setVolume(value:Float) {
if let player = audio {
var val = max(value, 0.0)
val = min(value, 1.0)
player.volume = val
}
}
}
感谢
答
如果我了解的情况,你想成为能够听音乐的音乐应用程序的例如,在同一时间玩你的游戏,对吧?
我不是很熟悉spriteKit,但对于一个正常的应用程序,你可以使用AVAudioSessionCategoryAmbient使您的应用程序不会停止其他声音。
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
谢谢你的回答,但不起作用:( –
感谢您的回答,它帮助了我! –