2016-04-09 14 views
2

zurück Dies ist das erste Mal, dass ich SKAudioNode verwende. Zuerst erklärte ich eine Immobilie an der Spitze meiner GameScene Klasse:Initialisierung von SKAudioNode mit fileNamed gibt

var backgroundMusic: SKAudioNode! 

Jetzt habe ich eine Hilfsmethode hinzugefügt:

func playBackgroundMusic(name: String) { 
    if backgroundMusic != nil { 
     backgroundMusic.removeFromParent() 
    } 

    backgroundMusic = SKAudioNode(fileNamed: name) 
    backgroundMusic.autoplayLooped = true 
    addChild(backgroundMusic) 
} 

Nun rief ich diese Methode wie folgt aus:

playBackgroundMusic("ABC.caf") 

Es löst einen schwerwiegenden Fehler in dieser Zeile aus:

backgroundMusic.autoplayLooped = true 

Sprichwort: Unerwartetes gefunden nil beim Entpacken optionaler Wert.

habe ich sicher, dass die

  • ABC.caf in meinem Projekt und wird in den Kopier Bündel Ressourcen aufgeführt folgenden machen.
  • Es ist richtig geschrieben.

Wo sonst sollte ich auf Fehler überprüfen?

EDIT:

Hier sind meine Konfiguration Info:

  • Xcode 7.3
  • iPhone mit iOS 9.3.2
  • Simulator mit iOS 9,3

Sowohl die Gerät und der Simulator funktioniert nicht.

EDIT2:

Ich änderte meine Codes auf die folgenden:

func playBackgroundMusic(name: String) { 
    if backgroundMusic != nil { 
     backgroundMusic.removeFromParent() 
    } 

    let temp = SKAudioNode(fileNamed: name) 
    temp.autoplayLooped = true 
    backgroundMusic = temp 
    //backgroundMusic = SKAudioNode(fileNamed: "SpaceGame.caf") 
    //backgroundMusic.autoplayLooped = true 
    addChild(backgroundMusic) 
} 

Jetzt ist meine App stürzt nicht mehr, aber es hat keine Geräusche. Irgendwelche Ideen?

P.S. Wenige Minuten, nachdem ich diese Frage zuletzt bearbeitet habe, habe ich versucht, alles in dieser Methode zu ersetzen mit:

runAction(SKAction.playSoundFileNamed(name, waitForCompletion: false)) 

Noch kein Ton. Vielleicht ein Problem mit der Sounddatei?

+0

Sie sind auf Xcode 7.3 richtig? http://StackOverflow.com/q/36273271/3402095 Für mich, wenn ich Xcode 7.1.1 verwende, auch wenn ich einen falschen Dateinamen gebe, wird "backgroundMusic" nicht als nil enden, sondern eher mit einer Art "leerem" SKAudioNode . Trotzdem wird es nicht abstürzen. Haben Sie übrigens versucht, den Sound wieder hinzuzufügen? Sie wissen, löschen Sie es aus dem Projekt, gehen Sie dann auf Product-> clean, ziehen Sie den gleichen Sound erneut in das Projekt und fügen Sie es dem Abschnitt Copy Bundle Resources hinzu ... Nur um zu sehen, ob dies nicht mit einem seltsamen Caching-Problem zusammenhängt Ich bezweifle das). – Whirlwind

+0

@Whirlwind Ja, ich bin auf Xcode 7.3. Ich habe versucht, die Musikdatei zu löschen und sie erneut zum Projekt hinzuzufügen, und habe einen Clean durchgeführt. Immer noch stürzt es ab, weil es beim Entpacken ein optionales Nil gefunden hat. –

+0

Hast du es mit "ABC" anstelle von "ABC.caf" versucht? –

Antwort

1

Ich reparierte dieses Problem mit dem Code, den ich in EDIT2 oben setzen:

func playBackgroundMusic(name: String) { 
    if backgroundMusic != nil { 
     backgroundMusic.removeFromParent() 
    } 

    let temp = SKAudioNode(fileNamed: name) 
    temp.autoplayLooped = true 
    backgroundMusic = temp 
    //backgroundMusic = SKAudioNode(fileNamed: "SpaceGame.caf") 
    //backgroundMusic.autoplayLooped = true 
    //addChild(backgroundMusic) 
    runAction(SKAction.playSoundFileNamed(name, waitForCompletion: false)) 
} 

Für das keinen Ton Teil macht den Side-Schalter auf dem iPhone nur sicher nicht auf rot.

+0

Dies verdient eine Gesichtspalme, jetzt, da Sie es funktioniert haben, versuchen Sie, die Temperatur herauszunehmen und zu sehen, ob es wieder funktioniert. Ich weiß, dass SKAudioNode ein Problem mit der Kopfhörerbuchse hat, vielleicht gibt es auch ein Problem mit dem Schalter. – Knight0fDragon

11

Ich lief gerade in dieses Problem. Anscheinend funktioniert es jetzt nur mit lokalen Variablen. Der folgende Code funktionierte.

var background:SKAudioNode! 

override func didMoveToView(view: SKView) { 
    let bg = SKAudioNode(fileNamed: "bg.mp3") 
    addChild(bg) 
    background = bg 
} 
+0

Das funktioniert tatsächlich. Danke vielmals! : D – appcodix

+0

Ausgezeichnet, +1, aber WARUM? –