Перетащите прямую линию от Sprite к месту расположения пальцев в SpriteKit - PullRequest
0 голосов
/ 14 октября 2019

Мне интересно, связана ли проблема с расположением моих узлов, а не с кодом, но я не могу заставить эту линию работать должным образом. Я хотел бы нарисовать прямую, перетаскиваемую линию от точки касания до положения касания. Затем узел переместится в положение, где касание закончено. Мой код основан на том, что я видел здесь, но до сих пор не могу его отобразить. Этот соответствующий узел является подклассом SKSpriteNode, и этот код находится в этом классе, а не в основном классе GameScene.

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
    self.childNode(withName: "line")?.removeFromParent()  // Remove any previous line
    guard let touch = touches.first else { return } 
    let positionInScene = touch.location(in: self.parent!)  // Use 'parent' here? 
    let path = CGMutablePath()
    let line = SKShapeNode(path: path)  // Create shape node with path as path
    line.name = "line"
    line.zPosition = 5000  // Just trying to make sure it's on top
    line.strokeColor = UIColor.red
    line.lineWidth = 20
    line.fillColor = UIColor.red
    path.move(to: CGPoint(x: self.position.x, y: self.position.y))
    path.addLine(to: CGPoint(x: positionInScene.x, y: positionInScene.y))
    self.addChild(line)
}

Когда я создаю и добавляю путь в touchesBegan, он появляется, но это рисует кучу линий, где я хочу только одну.

1 Ответ

0 голосов
/ 17 октября 2019

Простая ошибка. Просто нужно присвоить path линии после того, как она нарисована.

let path = CGMutablePath()    
path.move(to: CGPoint(x: self.position.x, y: self.position.y))
path.addLine(to: CGPoint(x: positionInScene.x, y: positionInScene.y))

let line = SKShapeNode(path: path)  // Create shape node with path as path
self.addChild(line)
...