2017-06-02 48 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!)