2016-10-28 94 views
0

在XCODE 8 /斯威夫特3和Spritekit,我播放背景音樂(5分鐘的歌曲),從GameViewController的viewDidLoad調用它(從所有場景的父,而不是來自特定的GameScene),因爲我希望它可以在不停頓的情況下在整個場景變化中播放。這發生沒有問題。無法從遊戲場景內停止背景音樂,斯威夫特3/Spritekit

但我的問題是,如何阻止隨意的背景音樂,當我一個場景裏面?當用戶在第三場景中獲得特定比分時,請說出嗎?因爲我無法訪問父文件的方法。下面是我用來調用音樂播放代碼:

類GameViewController:UIViewController的{

override func viewDidLoad() { 
    super.viewDidLoad() 

    var audioPlayer = AVAudioPlayer() 

    do { 
     audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!)) 
     audioPlayer.prepareToPlay() 

    } catch { 

     print (error) 
    } 
    audioPlayer.play() 

任何幫助,非常感謝

回答

2

爲什麼不創建一個可從訪問音樂助手類任何地方。無論是單例方式還是帶有靜態方法的類。這也應該讓你的代碼更清潔,更易於管理。

,這樣你就每次播放文件時沒有設置玩家我也分裂設置方法和播放方法。

如辛格爾頓

class MusicManager { 

    static let shared = MusicManager() 

    var audioPlayer = AVAudioPlayer() 


    private init() { } // private singleton init 


    func setup() { 
     do { 
      audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "music", ofType: "mp3")!)) 
      audioPlayer.prepareToPlay() 

     } catch { 
      print (error) 
     } 
    } 


    func play() { 
     audioPlayer.play() 
    } 

    func stop() { 
     audioPlayer.stop() 
     audioPlayer.currentTime = 0 // I usually reset the song when I stop it. To pause it create another method and call the pause() method on the audioPlayer. 
     audioPlayer.prepareToPlay() 
    } 
} 

當你的項目啓動只需調用設置方法

MusicManager.shared.setup() 

不是從項目中的任何地方,你可以說

MusicManager.shared.play() 

播放音樂。

要大於阻止它只是調用stop方法

MusicManager.shared.stop() 

對於具有多個軌道更豐富的功能例如看看我的助手在GitHub上

https://github.com/crashoverride777/SwiftyMusic

希望這有助於

+0

謝謝你 - 我會試試這個 – Apneist

+0

不客氣。讓我知道事情的後續。 – crashoverride777

+0

你最近怎麼樣? – crashoverride777