2017-06-02 2 views
0

Ich bin verwirrt, wie man eine Linie (SKShapeNode) um den unteren Punkt dreht (Anfangspunkt, hier), denke hier an eine Uhr.Wie man eine SKShapeNode-Linie um ihren unteren Punkt dreht

Ich habe folgendes, aber es scheint nicht wie erwartet zu rotieren.

public let line = SKShapeNode() 
    private let linePath = CGMutablePath() 

    init(begin: CGPoint, end: CGPoint) { 
     self.begin = begin 
     self.end = end 


     linePath.move(to: begin) 
     linePath.addLine(to: end) 

     line.path = linePath 
     line.strokeColor = UIColor.black 
     line.lineWidth = 3 
     SceneCoordinator.shared.gameScene.addChild(line) 
    } 


    public func rotate(angle: Double) { 
     var transform = CGAffineTransform(rotationAngle: CGFloat(angle)) 
     line.path = linePath.mutableCopy(using: &transform) 

    } 
+0

Ist es nicht möglich, zu erreichen, diese beiden Aspekte, die Position des Endpunkts in der Szene berechnen? Ich versuche, um den unteren Punkt zu drehen, aber auch in der Lage zu erfassen, was der oberste Punkt ist. Es tut mir leid, dass ich nicht viel mit Formen und Wegen gemacht habe, daher bin ich hier ein wenig unerfahren. – Brejuro

+0

Was ich im Wesentlichen versuche zu tun ist, Zeilen übereinander zu stapeln und jede zufällige Zeile zu rotieren. Also versuche ich herauszufinden, wie man sich entlang des unteren Punktes dreht, finde aber auch den oberen Punkt, so dass ich weiß, wo ich die nächste Linie platzieren soll. Das Endergebnis würde wie eine zufällige Zick-Zack-Linie aussehen. – Brejuro

+0

Wenn Sie Ihren Code durch meine vorgeschlagene Antwort ersetzen und dann eine andere Frage stellen, wird diese Frage für zukünftige Leser uninteressant. - Bitte behalten Sie Ihre ursprüngliche Frage (damit die Antwort sinnvoll ist). Sie können dann * zusätzliche * Informationen hinzufügen. –

Antwort

1

Ihre Funktion dreht den Weg um die Formen position und nicht um den Startpunkt der Linie (die (0, 0) Standardeinstellung), wie beabsichtigt.

das Problem zu lösen, um die Form mit einer gleichen Position erstellen, um den Ausgang Punkt der Linie und mit einer Linie relativ zu diesem Punkt:

linePath.move(to: CGPoint.zero) 
linePath.addLine(to: CGPoint(x: end.x - begin.x, y: end.y - begin.y)) 
line.path = linePath 
line.position = begin 
// ... 
SceneCoordinator.shared.gameScene.addChild(line) 

Beachten Sie, dass anstelle der Umwandlung den Pfades Sie können drehen, um den Knoten:

line.zRotation = angle 

oder mit Animation:

line.run(SKAction.rotate(toAngle: angle, duration: 0.2)) 

Sie können Koordinatensystem mit

let endPos = line.convert(CGPoint(x: end.x - begin.x, y: end.y - begin.y), to: line.scene!) 
Verwandte Themen