2017-07-15 3 views
4

Ich habe ein Problem bei der Entwicklung meiner Anwendung mit Swift 3 und Spritekit festgestellt. Ich habe vier separate Dreiecke gemacht, die ein Quadrat bilden, um eine Kollision zu erkennen. Wenn ich diese Dreiecke als eine Einheit rotiere, überlappen sie sich und halten nicht die Form eines Quadrats (sie überlappen sich gegenseitig) während der Drehung, sondern gehen dann wieder zu normal zurück, sobald die Drehung abgeschlossen ist.Überlappende SpriteNodes beim Drehen als Einheit

Dies ist der Code, den ich für die Rotation verwendet:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    for touch in touches{ 
     let location = touch.location(in: self) 

     if location.x < 0 { 
      blueTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 
      redTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 
      yellowTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 
      greenTriLeft.run(SKAction.rotate(byAngle: CGFloat(M_PI_2), duration: 0.2)) 

     } else if location.x > 0 { 
      blueTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
      redTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
      yellowTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
      greenTriRight.run(SKAction.rotate(byAngle: CGFloat(-M_PI_2), duration: 0.2)) 
     } 
    } 
} 

Im Folgenden ein Bild von meinem Platz aus vier separaten Dreiecken

square

Bitte fühlen Sie sich frei gemacht wird, mich zu fragen für jeder andere Code, den Sie sehen müssen, hilft jede Eingabe. Außerdem konnte ich das überlappende Problem in Aktion nicht so sehr im Voraus bedauern, aber ich werde mein Bestes versuchen, es zu bekommen.

Antwort

8

Das Problem ist, dass Sie die einzelnen Dreiecke drehen, die entsprechend ihrem eigenen Koordinatensystem gedreht werden. Stellen Sie sich vor, dass jedes Dreieck in der Mitte fixiert ist und um es gedreht wird. Offensichtlich überlappen sich die Dreiecke. Sie sollten sie um einen eindeutigen Punkt drehen. In Ihrem Fall ist der einfachste Weg, dies zu tun, sie zum gleichen übergeordneten Knoten hinzuzufügen, und dann das übergeordnete Element zu drehen:

+0

Würde ich in den Berührungen zu erklären, begann Funktion oder in der Klasse? –

+0

blueTriLeft = self.childNode (mitName: "blueTriLeft") as! SKSpriteNode –

+0

^^^^^^ wird dies die Lösung über –

Verwandte Themen