2016-04-14 108 views
2

我有一個名爲'backgroundMusic'的SKSpriteNode的子類,它由SKSpriteNode和AVAudioPlayer文件組成。我的目標是在實例化完成後徹底刪除'backgroundMusic'。我試着做:完全刪除SKSpriteNode變量

backgroundMusic.removeFromParent() 

但它只能刪除SKSpriteNode而不是AVAudioPlayer。

的主要問題是,這個子類的裏面,我叫了一堆的功能之外的功能中,當我嘗試清空子類:

backgroundMusic = nil 

調用所有功能的過程中仍然是當我重新實例化時會發生並導致問題。我相信會工作的是,如果我完全刪除'backgroundMusic',這將停止函數調用過程,然後在需要時重新實例化它,它應該可以正常工作而不會出現問題。我怎樣才能做到這一點?

編輯我想:

self.delete(backgroundMusic) 

和墜毀的應用。我應該使用這個嗎?如果是這樣如何?

回答

0

這是因爲您還沒有配置Audio Session

用於玩一些代碼:從文檔

import AVFoundation 

var audioPlayer = AVAudioPlayer() 

func playAudio() { 
    // Set the sound file name & extension 
    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Flip 02", ofType: "wav")!) 

    // Preperation 
    try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: AVAudioSessionCategoryOptions.MixWithOthers) 
    try! AVAudioSession.sharedInstance().setActive(true) 

    // Play the sound 
    do { 
     try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound) 
     audioPlayer.prepareToPlay() 
     audioPlayer.play() 
    } catch { 
     print("there is \(error)") 
    } 
} 

詳情:

AVAudioSessionCategoryOptionMixWithOthers

從本次會議音頻

混音的音頻來自其他活動會話。

僅在會話類別爲 AVAudioSessionCategoryPlayAndRecord或AVAudioSessionCategoryPlayback時有效。 (隱如果會話類是AVAudioSessionCategoryAmbient。)

如果您在使用此選項激活您的會話,你的應用程序的音頻 不會中斷音頻從其他應用程序(如音樂應用程序)。如果 未使用此選項(或可隱式混合的類別),則 激活您的會話將會中斷其他不可混合的會話。

要停止你可以這樣做:

do { 

     try AVAudioSession.sharedInstance().setActive(false) 

    } catch let error as NSError { 

     print(error.localizedDescription) 

    } 
+0

這不是我的問題。我想知道如何在實例化後刪除我的變量'backgroundMusic'。音樂很好。 – OriginalAlchemist

+0

你必須提供更多背景音樂代碼,你的問題不解釋你的音樂會在停止後繼續播放。 –