在新的Xcode中之前可以正常運行的SKAudioNode代碼貌似會有一些小問題,這發生在場景轉換後.
比如游戲主場景GameScene在New Game後會創建自身一個新的實例然後轉換過去:
let newScene = GameScene(fileNamed: "GameScene")
newScene!.scaleMode = .AspectFill
let reveal = SKTransition.flipHorizontalWithDuration(0.5)
self.view?.presentScene(newScene!, transition: reveal)
注意其中用了一個SKTransition的實例用來產生過渡效果,過渡時間為0.5秒.測試時發現如果在場景加載方法中使用SKAudioNode播放聲音則只能播放0.5秒的時間,然後就會無聲.如果過渡時間發生變化,則SKAudioNode播放時間也發生變化.不管如何,只要完成過渡,聲音就消失!
開始以為是舊場景中需要做清除操作,於是寫了如下的方法:
override func willMoveFromView(view: SKView) {
if let music = bgMusic{
music.paused = true
music.removeFromParent()
bgMusic = nil
}
if let music = bgMusicAlarm{
music.paused = true
music.removeFromParent()
bgMusicAlarm = nil
}
}
但是問題依舊.
遂將原來場景加載方法中播放聲音做一個細微延時操作,就沒有問題了,好神奇!
runAction(SKAction.waitForDuration(0.01),completion:{
self.playBgMusic("SpaceGame.caf")
})