2015-08-28 47 views
1

我很困難如何訪問和更改AVAudioPlayer變量從一個類到另一個類。如何停止從另一個類的SpriteKit遊戲中的音樂

我有一個名爲GameScene類,它有:

var backgroundMusicPlayer: AVAudioPlayer! 

而且沿的代碼,我有

func playBackgroundMusic(filename: String) { 
    let url = NSBundle.mainBundle().URLForResource(
     filename, withExtension: nil) 
    if (url == nil) { 
     println("Could not find file: \(filename)") 
     return 
    } 

    var error: NSError? = nil 
    backgroundMusicPlayer = 
     AVAudioPlayer(contentsOfURL: url, error: &error) 
    if backgroundMusicPlayer == nil { 
     println("Could not create audio player: \(error!)") 
     return 
    } 

    backgroundMusicPlayer.numberOfLoops = -1 
    backgroundMusicPlayer.prepareToPlay() 
    backgroundMusicPlayer.play() 



} 

我一直無法弄清楚如何訪問變量backgroundMusicPlayer從我的主菜單類。如果我可以訪問它,我相信backgroundMusicPlayer.stop()將做到這一點。

+2

您可以創建一個具有您當前'backgroundMusicPlayer'實例的單例類。檢查這個答案:http://stackoverflow.com/questions/19086419/how-to-create-avplayer-singleton-class – WangYudong

回答

1

當您從GameScene類轉換到MainMenu類時,您應該考慮在GameScene中停止音樂播放器。您可以從MainMenu課程重新開始音樂。

如果因爲任何原因你不想這樣做,請看看使用NSNotificationCenter在類之間發送消息。

+0

主菜單目前不播放任何音樂。我希望能夠從設置按鈕中訪問背景音樂,但NSNotification可能會起作用。 –

0

我通過聲明一個全局變量並在每次按下靜音按鈕時遞增全局變量來實現它。然後我回到playbackgroundMusic函數並添加了一個if語句。

func playBackgroundMusic(filename: String) { 
    let url = NSBundle.mainBundle().URLForResource(
     filename, withExtension: nil) 
    if (url == nil) { 
     println("Could not find file: \(filename)") 
     return 
    } 

    var error: NSError? = nil 
    backgroundMusicPlayer = 
     AVAudioPlayer(contentsOfURL: url, error: &error) 
    if backgroundMusicPlayer == nil { 
     println("Could not create audio player: \(error!)") 
     return 
    } 



    backgroundMusicPlayer.numberOfLoops = -1 
    backgroundMusicPlayer.prepareToPlay() 
    backgroundMusicPlayer.play() 

    if soundCount % 2 == 1 
    { 
     backgroundMusicPlayer.stop() 
    } 


} 

這適用於現在,但我不知道我怎麼就能把音量調低,即使用戶關閉了重新啓動的應用程序。