2015-02-23 15 views
7

Ho visto che in XCode 6 c'è un editor di livelli incorporato. Non sono riuscito a trovare molta documentazione su come usarlo o come funziona, ma sono stato in grado di capire come usarlo per creare SKSpriteNodes e quindi collegarlo a un file .swift usando childNodeWithName(). Quando realizzi un nuovo progetto SpriteKit, inizia con GameScene.swift e GameScene.sks. Sono stato in grado di usarli per rendere visivamente un livello, quindi ho potuto codificarlo nel GameScene.swift, ma quando ho provato a creare i miei file .sks e .swift per un nuovo livello, non riuscivo a connettere i file .sks e il file .swift che avevo creato. Ho provato seguendo questo tutorial esattamente:Come faccio a collegare un file .sks a un file .swift in SpriteKit

http://www.techotopia.com/index.php/An_iOS_8_Swift_Sprite_Kit_Level_Editor_Game_Tutorial#Creating_the_Archery_Scene

Quando ho collegato i due file errori si avvicinò, e poi quando sono passato alla scena che la transizione correttamente, ma niente che ho aggiunto visivamente alle .sks mostravano nel simulatore. Per favore aiuto, ho passato ore a cercare soluzioni per questo. I pochi tutorial e forum che sono riuscito a trovare sull'editor di livelli hanno parlato solo di GameScene.swift e .sks che iniziano con un nuovo progetto SpriteKit.

+0

puoi mostrare il codice in cui istanziati il ​​nuovo SKScene e la transizione ad esso? – rakeshbs

+0

possibile duplicato di [Qual è la relazione tra i file GameScene.swift e GameScene.sks nel modello SpriteKit] (http://stackoverflow.com/questions/26765573/whats-the-relationship-between-gamescene-swift-and-gamescene- sks-files-in-sprit) – rickster

risposta

5

Questo metodo annulla l'archiviazione di un file sks e lo inizializza come qualsiasi sottoclasse SKNode su cui è chiamato. Ciò significa che è possibile annullare l'archiviazione di un file come SKNode (quindi il nodo radice sarà un SKNode) e aggiungerlo come un bambino alla scena. Puoi anche annullare l'archiviazione di un file come GameScene o qualsiasi sottoclasse SKNode.

extension SKNode { 
    class func unarchiveFromFile(file : NSString) -> SKNode? { 
     if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") { 
      var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)! 
      var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData) 

      archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene") 
      let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as SKNode 
      archiver.finishDecoding() 
      return scene 
     } else { 
      return nil 
     } 
    } 
} 

usare in questo modo:

let scene = GameScene.unarchiveFromFile("GameScene")! as GameScene 

o

let levelStuff = SKNode.unarchiveFromFile("Level 1")! 
self.addChild(levelStuff) 
+0

Mi dispiace se la mia domanda aveva già avuto risposta. Ho letto quel post sul forum che era collegato da rickster, ma non era proprio quello che stavo cercando. Ho usato il: let levelStuff = SKNode.unarchiveFromFile ("Livello 1")! self.addChild (levelStuff) per aggiungere i nodi dalla mia .sks alla mia scena. Ora posso controllare i nodi aggiunti visivamente con il codice. Ho intenzione di usarlo per creare solo piattaforme statiche, quindi utilizzare il codice per aggiungere il mio "eroe". Grazie mille per avermi aiutato, è stata una soluzione semplice, e ora posso facilmente creare e progettare nuovi livelli per il mio gioco che ho realizzato. –

+1

Inoltre, questa è la mia prima volta che uso SEMPRE qualsiasi tipo di forum, quindi mi dispiace se non sto facendo le cose come dovrebbero essere fatte –

+0

Se questa risposta risolvesse il problema, considereresti accettarlo (fai clic sul segno di spunta verde) – Okapi

2

Al tempo di questa risposta (Xcode 8.2.1) il modo 'semplice' di farlo è: Seleziona il file .sks nel Navigatore progetto in modo da visualizzare l'editor grafico. Quindi vai all'Area Utility (lato destro), sotto la scheda "Custom Class Inspector"; Campo "Classe personalizzata", digitare il nome della classe nel file .swift.

+0

grazie ,, ma questo non può essere fatto per ShapeNode. nel caso in cui se qualcuno sta cercando di farlo. – user431791

Problemi correlati