Swift 如何围绕底部点旋转SKShapeNode线

Swift 如何围绕底部点旋转SKShapeNode线,swift,sprite-kit,Swift,Sprite Kit,我不知道如何旋转一条线(SKShapeNode)围绕它的底部点(起点,这里),想想这里的时钟 我有以下内容,但它似乎没有像预期的那样旋转 public let line = SKShapeNode() private let linePath = CGMutablePath() init(begin: CGPoint, end: CGPoint) { self.begin = begin self.end = end

我不知道如何旋转一条线(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,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!)

难道这两方面都不可能做到吗?我试着围绕着底部点旋转,但也能捕捉到顶部点是什么。很抱歉,我没有对形状和路径做太多的研究,所以我在这里有点经验不足。我基本上是在尝试将线堆叠在彼此的顶部,以及任何可以旋转的随机线。所以我试图找出如何沿着底部点旋转,同时也找到顶部点,这样我就知道下一条线的位置。最终的结果看起来就像一条随机的之字形线条,用我的建议答案替换你的代码,然后再问另一个问题,这让未来的读者无法理解这个问答请保留你原来的问题(这样答案才有意义)。然后,您可以添加其他信息。我的坏,我的意图是编辑它,并询问我是否理解您的正确性,因为我不想复制和粘贴一个函数到注释中。我在答案中添加了一些内容,这可能正是您想要的。