2016-04-14 7 views
2

Ich habe eine Unterklasse von SKSpriteNode namens 'backgroundMusic', die aus einer SKSpriteNode- und einer AVAudioPlayer-Datei besteht. Das Ziel ist, 'backgroundMusic' nach der Instanziierung vollständig zu löschen. Ich versuche zu tun:SKSpriteNode-Variable vollständig löschen

backgroundMusic.removeFromParent() 

aber es entfernt nur den SKSpriteNode und nicht den AVAudioPlayer.

Das Hauptproblem ist, dass innerhalb dieser Unterklasse, habe ich eine Reihe von Funktionen in andere Funktionen aufrufen, und wenn ich versuche, die Unterklasse zu leeren, indem Sie:

backgroundMusic = nil 

den Prozess alle Funktionen nach wie vor der Berufung ist kommt vor und verursacht Probleme, wenn ich es wieder instanziiere. Was ich glaube, wird funktionieren, wenn ich "backgroundMusic" vollständig lösche, was den Funktionsaufrufprozess stoppt, und es später wieder instanziiere, wenn ich es brauche, sollte es gut ohne Probleme funktionieren. Wie kann ich das machen?

EDIT Ich habe versucht:

self.delete(backgroundMusic) 

und die Anwendung abgestürzt. Soll ich das benutzen? Wenn das so ist, wie?

Antwort

0

Dies geschah, weil Sie Audio Session

Einige Code für die Wiedergabe konfigurieren havent:

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)") 
    } 
} 

Informationen aus der Dokumentation:

AVAudioSessionCategoryOptionMixWithOthers

Mixes Audio von dieser Sitzung mit Audio von anderen aktiven Sitzungen.

Nur gültig, wenn die Sitzungskategorie AVAudioSessionCategoryPlayAndRecord oder AVAudioSessionCategoryPlayback ist. (Implicit, wenn die Sitzung Kategorie AVAudioSessionCategoryAmbient ist.)

Wenn Sie Ihre Sitzung aktivieren, während diese Option verwenden, Audio-App- nicht Tonunterbrechungs von anderen Anwendungen (wie die Musik-App). Wenn diese Option nicht verwendet (oder eine Kategorie, die implizit mischbar ist), wird durch das Aktivieren Ihrer Sitzung andere nicht mischbare Sitzungen unterbrochen.

So stoppen Sie tun können:

do { 

     try AVAudioSession.sharedInstance().setActive(false) 

    } catch let error as NSError { 

     print(error.localizedDescription) 

    } 
+0

Das ist nicht mein Problem. Ich möchte wissen, wie ich meine Variable 'backgroundMusic' löschen kann, nachdem ich sie instanziiert habe. Die Musik ist in Ordnung. – OriginalAlchemist

+0

Sie müssen mehr backgroundMusic-Code zur Verfügung stellen, Ihre Frage nicht erklären, ob Ihre Musik fortgesetzt wird, nachdem Sie aufhören. –