创建一个包含两个CGPoints SpriteKit Swift的行

我试图制作一个简单的应用程序,你触摸一个点,一个精灵跟随一条线穿过该点到屏幕的边缘,无论你在哪里触摸。 我想绘制连接精灵的原点(它开始的点)和你触摸的点之间的线段,以及精灵的原点和屏幕边缘的终点之间的线段,这样我就可以看到精灵以及原点,触点和终点的x和y偏移之间的关系。

希望这不是太混乱。

TL; DR:我需要在两点之间划一条线,我不知道如何使用SpriteKit Swift来做到这一点。

提前致谢。

这可以使用CGPath和SKShapeNode完成。

让我们从CGPath开始。 当我们需要使用一系列形状或线条构造路径时,使用CGPath。 路径是连接两个点的线。 所以要划一条线:

  1. moveToPoint:它将路径的当前点设置为指定的点。
  2. addLineToPoint:它从当前点到指定点绘制一条直线。 或者addCurveToPoint:它根据某些切线和控制点绘制从当前点到指定点的曲线。

您可以在此处查看文档: http : //developer.apple.com/library/mac/#documentation/graphicsimaging/Reference/CGPath/Reference/reference.html

你需要做的是:

var path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, 100, 100) CGPathAddLineToPoint(path, nil, 500, 500) 

现在,为了使路径可见,并给它像笔触颜色,线宽等属性,你在SpriteKit中创建一个SKShapeNode并添加它的路径。

  let shape = SKShapeNode() shape.path = path shape.strokeColor = UIColor.whiteColor() shape.lineWidth = 2 addChild(shape) 

希望这可以帮助 :)。

对于Swift 3, CGPathMoveToPoint方法不再喜欢第二个参数的nil ,所以我需要一个新的解决方案。 这就是我想出的:

 let line_path:CGMutablePath = CGMutablePath() line_path.move(to: CGPoint(x:x1, y:y1)) line_path.addLine(to: CGPoint(x:x2, y:y2)) 

按照本教程逐步进行操作即可实现。

考虑以下代码:

 override func touchesMoved(touches: NSSet, withEvent event: UIEvent) { let location = touches.anyObject()!.locationInNode(scene) if let pig = movingPig { pig.addMovingPoint(location) } } 

这是一种简单的方法。 你获得用户手指的下一个位置,如果你在touchesBegan(_:,withEvent:)找到了一只猪,如非零的movingPig值所示,你将该猪的位置添加为下一个航点。

到目前为止,你可以存储猪的路径 – 现在让我们让猪沿着这条路走。 将以下代码添加到GameScene.swift update()

 dt = currentTime - lastUpdateTime lastUpdateTime = currentTime enumerateChildNodesWithName("pig", usingBlock: {node, stop in let pig = node as Pig pig.move(self.dt) }) 

你可以看到结果:

在此处输入图像描述

绘图线:

目前,只有猪知道它想要旅行的路径,但场景也需要知道这条路来画它。 这个问题的解决方案是Pig类的一种新方法。

 func createPathToMove() -> CGPathRef? { //1 if wayPoints.count <= 1 { return nil } //2 var ref = CGPathCreateMutable() //3 for var i = 0; i < wayPoints.count; ++i { let p = wayPoints[i] //4 if i == 0 { CGPathMoveToPoint(ref, nil, px, py) } else { CGPathAddLineToPoint(ref, nil, px, py) } } return ref } 

这种绘制猪路径的方法:

 func drawLines() { //1 enumerateChildNodesWithName("line", usingBlock: {node, stop in node.removeFromParent() }) //2 enumerateChildNodesWithName("pig", usingBlock: {node, stop in //3 let pig = node as Pig if let path = pig.createPathToMove() { let shapeNode = SKShapeNode() shapeNode.path = path shapeNode.name = "line" shapeNode.strokeColor = UIColor.grayColor() shapeNode.lineWidth = 2 shapeNode.zPosition = 1 self.addChild(shapeNode) } }) } 

这是你的结果:

在此处输入图像描述

你可以设置猪的路径。

您可以根据需要进行修改。

希望它会有所帮助。