我幾個月前就遇到了這個問題,所以我嘗試了AudioToolbox
框架作爲替代,它的作品一樣好,沒有內存泄漏。
我有一些我想用於遊戲的聲音效果,所以我創建了一個函數,如波紋管,它在sfx數組中設置所有systemSoundID
。
var sfx = [SystemSoundID]()
func createSfx() {
var i = 0
while i < 8 {
var fileName = ""
switch i {
case 0:
fileName = "coinCollected"
case 1:
fileName = "laserGun"
case 2:
fileName = "laserBeamShutOff"
case 3:
fileName = "powerDown"
case 4:
fileName = "shipMovement"
case 5:
fileName = "openBlockade"
case 6:
fileName = "invisibilityOn"
case 7:
fileName = "outOfFuel"
default:
print("Error creating sfx")
}
sfx.append(SystemSoundID())
let filePath = NSBundle.mainBundle().pathForResource(fileName, ofType: "wav")
let soundURL = NSURL(fileURLWithPath: filePath!)
AudioServicesCreateSystemSoundID(soundURL, &sfx[i])
i += 1
}
}
然後,您可以發揮利用AudioServicesPlaySystemSound
音效與喜歡的聲音效果數組索引:
AudioServicesPlaySystemSound(sfx[1]) // Plays laserGun sound effect
也只是讓你知道,有一個問題我用這個時候找到。如果您使用AVAudioPlayer
播放背景音樂,則音效的音量不會超過設備的中途點。我不知道爲什麼發生這種情況,但我浪費了很多時間試圖尋找音效的替代品,儘管存在輕微的音量問題,但這是最好的選擇。
希望這可以幫助一些正在尋找SKAction的替代品。
你可以發表一些關於你如何創建和播放聲音的代碼嗎? –
是的,虐待更新與一些代碼的職位。 – Electric
還沒有找到解決方案。如果有人知道,我會非常有興趣瞭解爲什麼。 – Electric