Hinzufügen von mehreren sprite-Knoten der Szene mittels einer Funktion/Methode in swift

Sagen wir, ich habe 10 Knoten, wobei alle Knoten sind die Punkte Bild, die node1 thru node10. Ich erstelle node1 wie die folgenden:

func createNode1() -> SKNode {
  let spriteNode = SKNode()
  spriteNode.position = CGPointMake(CGRectGetMidX(self.frame)/1.35, CGRectGetMidY(self.frame)/1.32)
  let sprite = SKSpriteNode(imageNamed: "dot_1")
  sprite.zPosition = 3.0
  sprite.name = "A1_Dot"
  spriteNode.addChild(sprite)      
  return spriteNode
}

Ich schaffen, der rest der Knoten durch die Schaffung von 9, mehr Funktionen, wo die nächste sein würde, als func createNode2etc, den ganzen Weg bis zu 10 Funktionen, in denen der einzige Unterschied zwischen Ihnen ist der Knoten s name und seine Lage. Im Grunde ist jeder Knoten verfügt über eine andere Stelle in der Szene und natürlich verschiedene image-name. Gibt es eine Möglichkeit zum laden der 10-Knoten in die Szene und auf einmal manipulieren-Knoten-Standorten zum Zeitpunkt der Verwendung.? Ich bin auf der Suche nach einem Weg zum laden 10-Knoten-Szene mit einer einzelnen Funktion oder Methode, und weisen Sie Knoten, die Positionen innerhalb dieser gleichen Funktion. Danke.

InformationsquelleAutor saate_group | 2016-03-15



3 Replies
  1. 0

    Müssen Sie eine Schleife für die Iteration durch ein array von Positionen, und bewegen Sie Ihre Codes fügt hinzu, dass die Knoten, um die Szene, in der Schleife:

    let positions = [CGPointMake(CGRectGetMidX(self.frame)/1.35, CGRectGetMidY(self.frame)/1.32), ... /*add your 9 other positions here*/]
    positions.enumerate().forEach { (index, point) in
      let spriteNode = SKNode()
      spriteNode.position = point
      let sprite = SKSpriteNode(imageNamed: "dot_\(index + 1)")
      sprite.zPosition = 3.0
      sprite.name = "A\(index + 1)_Dot"
      spriteNode.addChild(sprite)      
    
      //Add spriteNode to the scene here
    }
  2. 1

    Können Sie entweder eine Schleife verwenden, die als Jugale vorgeschlagen, oder Sie könnten einfach die Werte, die Sie möchten in die Methode

    Beispielsweise

        func createNode1(imageNamed imageNamed: String, name: String, pos: CGPoint) -> SKNode {
            let spriteNode = SKNode()
            spriteNode.position = pos
            let sprite = SKSpriteNode(imageNamed: imageNamed)
            sprite.zPosition = 3.0
           sprite.name = name
           spriteNode.addChild(sprite)      
            return spriteNode
       } 

    Und jetzt in Ihrer Szene, die Sie hinzufügen können die Knoten wie so

     let node1Pos = ...
     node1 = createNode1(imageNamed: "...", name: "A1_Dot", pos: node1Pos)
    
    
     let node2Pos = ...
     node2 = createNode1(imageNamed: "...", name: "A1_Dot", pos: node2Pos)

    Ich sage ImageNamed zweimal in der create-Node-Funktion, weil, wenn Sie passieren Sachen in Funktionen Swift standardmäßig nicht erforderlich, die erste Beschreibung eingegeben beim Aufruf der Methode. (siehe unten)
    Also wenn der sagen würde imageNamed nur einmal, als Sie es nennen würde so gerne.

      node1 = createNode1("...", pos: node1Pos)

    Auch Ihre Knoten erstellen Funktion vereinfacht werden könnte, es sei denn, Sie möchten gezielt Rückkehr eine SKNode in der Methode.

       func createNode1(imageNamed imageNamed: String, name: String, pos: CGPoint) -> SKSpriteNode {
    
            let sprite = SKSpriteNode(imageNamed: imageNamed)
            sprite.position = pos
            sprite.zPosition = 3.0
           sprite.name = name
           addChild(sprite)      
            return sprite
       } 
    • Beide Ideen sind gut. Sie erinnern sich aus dem anderen posting, ich bin mit baseScene laden alle meine 10 Knoten und leve1Scene thru level30Scene, wo alle 30 Szenen sind Unterklasse von baseScene. Jeder leveXScene wird Platz zum Beispiel node1 an einen anderen Speicherort auf jede der 30 Szenen. Würde ich immer noch mit diesem Ansatz, den Sie hier erwähnen, um diese Einrichtung für Knoten in baseScene? Danke.
    • Ja natürlich.
    • Dies funktioniert perfekt. Danke.
    • Freund. Lassen Sie mich noch eine Sache in Bezug auf diesen Ansatz hier. Lassen Sie uns sagen, in baseScene ich befolgen Sie diese Schritte zum erstellen node1 dann in der gleichen Szene, in didMoveToView ich mache “ let ’node1Pos = … node1 = createNode1(imageNamed: „…“, name: „A1_Dot“, pos: node1Pos)‘. Der nächste Schritt, um mit diesen Knoten werden Level1Scene die Unterklasse von baseScene. Wie würde ich damit umgehen node1 wenn ich nur haben, um seine position zu ändern, in Level1Scene Unterklasse? Ich muss nur bestätigen, wenn meine Antwort auf die folgende Lösung korrekt ist. Danke!!!
    • U fragte mich diese vor, ändern Sie einfach die position der Knoten zu dem, was Sie wollen (node1.position = …) in der Szene, die Sie wollen.
    • Ja, habe ich. Ich war verloren nur wenig. Funktioniert Super chief! Danke!

  3. 0

    Entweder Weg ist akzeptable Lösung. Hier sind alle details. In baseScene wir erstellen Funktion createNodes und rufen Sie die Funktion in didMoveToView wo nodeA1 gegeben ist-position und Hinzugefügt, um die Szene, wie unten gezeigt.

    override func didMoveToView(view: SKView) {
    let nodeA1Pos = CGPointMake(CGRectGetMidX(self.frame)/1.5, CGRectGetMidY(self.frame)/2.0)
        nodeA1 = createNodes(imageNamed: "dot_1", name: "A1_Dot", pos: nodeA1Pos)
        addChild(nodeA1)
    }

    Dann in Level1Scene die Unterklasse von baseScene geben wir nur eine neue position zu nodeA1 die überschreiben die position ursprünglich gesetzt in baseScene:

    override func didMoveToView(view: SKView) {
        super.didMoveToView(view)
        nodeA1.position = CGPointMake(CGRectGetMidX(self.frame)/1.3, CGRectGetMidY(self.frame)/0.67)
    }

    Diese Weise Unterklassen spart eine Menge Zeit und code als nur eine Funktion verwendet wird, generieren alle gängigen sprite Knoten.

    Dank crashoverride777 !!!!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.