Lade SpriteKit Ebenen von Dateiname

Für ein Spiel, das ich erstelle, möchte ich viele benutzerdefinierte Level erstellen können, die einfach geladen werden können. Jede Ebene sollte eine .sks-Schnittstellendatei und eine eigene .swift-Datei für die SKScene-Unterklasse haben.XCode http://i62.tinypic.com/14lhml2.pn

Right now, das funktioniert:

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

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

Wo ich die Szene so erstelle:

if let scene = SKScene.unarchiveFromFile("Level1", theClass: Level1.classForKeyedUnarchiver())

Aber dies funktioniert nicht für große Sammlungen, da ich nicht über jede Ebene in einem Ordner von ihnen iterieren kann. Ich brauche so etwas

if let scene = SKScene.unarchiveFromFile("Level1", className:"Level1")

Ich habe versucht mitdiese Antwort, um die Klasse wie folgt aus dem String abzurufen, aber die Szene wurde so geladen, als wäre es nur eine SKScene, kein Level1-Objekt.

let classFromString: AnyClass! = NSObject.swiftClassFromString("Level1")
    if let scene = SKScene.unarchiveFromFile("Level1", theClass: classFromString)

Fürs Erste werde ich damit arbeiten, aber ich denke nicht, dass dies der beste Ansatz ist:

let levels = [
    ("Level1", Level1.classForKeyedUnarchiver()),
    ("Level2", Level2.classForKeyedUnarchiver())]

let level1 = levels[0]
let (fileName : String, theClass: AnyClass!) = classes[0]
if let scene = SKScene.unarchiveFromFile(fileName, theClass: theClass)

Ich möchte nur in der Lage sein, eine große Sammlung von leicht ladbaren SKScene-Unterklassen mit jeweils einer eigenen Schnittstellendatei zu erstellen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage