2016-10-24 106 views
0

我想在Swift 3中編寫我的遊戲中的背景音樂。我嘗試了很多教程和示例代碼,但找不到在Swift 3代碼中工作的實現。我能找到的最佳示例代碼是:Swift 3中的背景音樂

lazy var backgroundMusic: AVAudioPlayer? = { 
    guard let url = Bundle.main.url(forResource: "Music Title", withExtension: "mp3") else { 
     return nil 
    } 

    do { 
     let player = try AVAudioPlayer(contentsOf: url) 
     player.numberOfLoops = -1 
     return player 
    } catch { 
     return nil 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    backgroundMusic?.play() 
} 

我已將音樂文件放在名爲「Resources」的單獨文件夾中。如果你能幫助我,我會非常高興!


我用下劃線改變了文件名中的空格,但問題依然存在。 順便說一句,當我跟隨在Xcode翻譯提示我得到這個代碼:

lazy var backgroundMusic: AVAudioPlayer? = { 
    guard let url = Bundle.main.url(forResource: "Mining by Moonlight", withExtension: "mp3") else { 
     return nil 
    } 

    do { 
     let player = try AVAudioPlayer(contentsOf: url) 
     player.numberOfLoops = -1 
     return player 
    } catch { 
     return nil 
    } 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    backgroundMusic?.play() 
} 

lazy var backgroundMusic設置一個斷點,並步入代碼後,我從調試器獲得以下結果:

0x1029097d8 < +760>:movq 0x69a9(%rip),%rcx;直接字段(_98A37426C9C75C234890E1E239802C1D backgroundMusic.storage)爲TabTab.ViewController偏移:Swift.Optional>

+1

而當您使用調試器來遍歷您的代碼時,您發現.....? –

+0

請不要忽略你緩存的錯誤。至少記錄它。 –

+0

當我在函數入口使用調試器時,得到: –

回答

1

在迅速3

class MusicHelper { 
static let sharedHelper = MusicHelper() 
var audioPlayer: AVAudioPlayer? 
func playBackgroundMusic() { 
    let aSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "mario", ofType: "mp3")!) 

    print(aSound) 
    do { 
     audioPlayer = try AVAudioPlayer(contentsOf:aSound as URL) 
     audioPlayer!.numberOfLoops = -1 
     audioPlayer!.prepareToPlay() 
     audioPlayer!.play() 
    } catch { 
     print("Cannot play the file") 
    } 
} 

}

和在viewDidLoad中添加此 MusicHelper。 sharedHelper.playBackgroundMusic()