2017-07-28 1 views
4

Ich baue ein Spiel in Xcode 8 Sprite-Kit und ich habe verschiedene Ebenen, aber wenn ich die nächste Ebene Szene laden, läuft der Code für die erste Ebene noch. Alle Ebenen haben ihre eigenen schnellen Dateien mit den gleichen Namen wie ihre jeweiligen Szenen. Wie führe ich den Code aus, der für verschiedene Szenen gedacht ist?Wie führe ich verschiedene Codes für verschiedene Szenen im Xcode Sprite-Kit aus?

dies ist die Funktion, die ich Ebenen

class func level(_ levelNumber: Int) -> GameScene? 
{ 
    guard let scene = GameScene(fileNamed: "Level_\(levelNumber)") else 
    { 
     return nil 
    } 

    scene.scaleMode = .aspectFit 
    return scene 
} 

dies Code aufrufen, um Ebenen zu ändern ändert:

guard let scene = GameScene.level(currentScene) else 
{ 
    print("Level \(self.currentLevel+1) is missing?") 
    return 
} 

scene.scaleMode = .aspectFit 
view.presentScene(scene) 
+0

zeigen uns einige Code, wie Sie die verschiedenen Szenen laden –

+0

derzeit Code in Ihrer Frage mit der richtigen Codeblöcke setzen Sie sich bitte –

+0

sind alle Ihre Stufe * .sks Dateien vom Typ GameScene Klasse? –

Antwort

2

Ich persönlich handhaben dies ein wenig anders.

Ich mache meine Level-Dateien gerne im Scene Editor, das macht sie sehr schnell aus.

Ich habe alle Kern-Game-Engine Sachen in meinem GameScene.swift und GameScene.sks Dateien (dh. GameHUD, Spieler, Ritzen, Pause ... bla bla bla)

ich dann separat meine Ebene erstellen Dateien B. Level1.sks, Level2.sks usw. Aber diese werden vom Klassentyp Level sein, und auf diese Weise müssen Sie nicht generische Sachen wiederholen, die auf allen Levels in jeder Level.sks-Datei üblich sind.

Ich dann laden Sie die GameScene-Datei und behandeln alle Objekte, die auf allen Ebenen generisch sind.

Dann lade ich mein Level. Es ist wichtig zu beachten, dass wenn du das so machst und separate Sks-Dateien für Levels und GameScene hast, musst du die Objekte aus der Level-Datei in dein GameScene verschieben, wenn du sie lädst.

func createLevel(levelID: Int) { 

    if let levelNode = SKReferenceNode(fileNamed: "Level\(levelID)") { 

     if let background = levelNode.childNode(withName: "backgroundTiles") as? SKTileMapNode { 
      background.move(toParent: self) 
     } 

     if let water = levelNode.childNode(withName: "waterTiles") as? SKTileMapNode { 
      water.move(toParent: self) 
     } 

     if let badGuy = levelNode.childNode(withName: "badGuy") as? SKSpriteNode { 
      self.badGuy = badGuy 
      badGuy.move(toParent: self) 
     } 
    } 
} 
Verwandte Themen