2017-06-02 52 views
0

我很困惑如何围绕它的底点(开始点,在这里)旋转一条线(SKShapeNode),在这里想一个时钟。如何旋转一个SKShapeNode线围绕它的底点

我有以下,但它似乎并没有像预期的那样旋转。

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

是没可能做到这两个方面?我试图围绕底点旋转,但也能够捕捉到最重要的一点。我很抱歉,我没有在形状和路径上做很多事情,所以我在这里有点没有经验。 – Brejuro

+0

我基本上试图做的是将线叠在彼此之上,并且可以旋转任何随机线。所以我想弄清楚如何沿底点旋转,还要找到最高点,以便我知道下一行的位置。最终结果看起来像是一些随机的锯齿形线 – Brejuro

+0

用我的建议答案替换您的代码,然后询问另一个问题使得此问答对于未来的读者来说是不可理解的。 - 请保留您的原始问题(以便答案有意义)。然后你可以添加*额外的*信息。 –

回答

1

你的函数绕所述 形状position的路径(这是(0, 0)默认情况下),而不是围绕该线的起点按预期。

为了解决这个问题,创建等于启动 点线的位置,形状,以及相对于一条线,这一点:

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) 

注意,而不是转化的路径,你可以旋转节点:

line.zRotation = angle 

或与动画:

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

你可以计算终点的位置场景的 坐标系与

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