Swift 使用SKShapeNode在Sprite工具包中绘制虚线
这就是我所尝试的Swift 使用SKShapeNode在Sprite工具包中绘制虚线,swift,sprite-kit,cgpath,skshapenode,Swift,Sprite Kit,Cgpath,Skshapenode,这就是我所尝试的 var pattern[2]:CGFloat; this var dashed: CGPathRef = CGPathCreateCopyByDashingPath(CGPathCreateCopyByDashingPath(path, transform, phase, lengths, count); var myShapeNode: SKShapeNode!; var CGPathCreateCopyByDashingPath:CGPathRef;
var pattern[2]:CGFloat; this
var dashed: CGPathRef = CGPathCreateCopyByDashingPath(CGPathCreateCopyByDashingPath(path, transform, phase, lengths, count);
var myShapeNode: SKShapeNode!;
var CGPathCreateCopyByDashingPath:CGPathRef;
这就是如何在swift中绘制虚线的方法。您可以根据需要更改参数
let bezierPath = UIBezierPath()
let startPoint = CGPointMake(0, 250)
let endPoint = CGPointMake(450, 250)
bezierPath.moveToPoint(startPoint)
bezierPath.addLineToPoint(endPoint)
var pattern : [CGFloat] = [10.0, 10.0]
let dashed = CGPathCreateCopyByDashingPath (bezierPath.CGPath, nil, 0, pattern, 2)
var shapeNode = SKShapeNode(path: dashed)
shapeNode.position = CGPointMake(100, 100)
self.addChild(shapeNode)
对于任何想知道如何将同样的原理应用到像我一样的SKShapeNode的人,这里有一个例子。带有蓝色虚线的矩形
import SpriteKit
import GameplayKit
let square = SKShapeNode(rectOfSize: CGSize(width: 64, height: 64))
let circle = SKShapeNode(circleOfRadius: 20.0)
var pattern : [CGFloat] = [2.0, 2.0]
let dashed = CGPathCreateCopyByDashingPath (square.path, nil, 0, pattern, 2)
var shapeNode = SKShapeNode(path: dashed!)
shapeNode.fillColor = UIColor.blueColor()
shapeNode.strokeColor = UIColor.blueColor()
在swift 4中:
let square = SKShapeNode(rectOf: CGSize(width: 64, height: 64))
let pattern : [CGFloat] = [4.0, 4.0]
let dashed = square.path?.copy(dashingWithPhase: 1, lengths: pattern)
let shapeNode = SKShapeNode(path: dashed!)
shapeNode.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
shapeNode.fillColor = SKColor.clear
shapeNode.strokeColor = SKColor.red
shapeNode.lineWidth = 2
self.addChild(shapeNode)
斯威夫特5
if let path = path?.copy(dashingWithPhase: 1, lengths: [5, 5]) {
let line = SKShapeNode(path: path)
line.strokeColor = .white
self.addChild(line)
}
添加到上面Mike Glukhov提供的解决方案中,这是我的解决方案:
func drawTrace(pointArray: Array<CGPoint>) {
if pointArray.count > 1 {
let pattern : [CGFloat] = [10.0, 10.0]
let path = CGMutablePath.init()
// start at the first point.
path.move(to: pointArray[0])
// now add all of the others.
for p in 1 ..< pointArray.count {
path.addLine(to: pointArray[p])
}
// create the dashed path.
let dashedPath = path.copy(dashingWithPhase: 1, lengths: pattern)
let dashName = "dash"
// now create the node
let line = SKShapeNode(path: dashedPath)
line.strokeColor = .white
line.name = dashName
if let parent = self.parent {
if let oldLine = parent.childNode(withName: dashName) {
oldLine.removeFromParent()
}
parent.addChild(line)
}
}
}
func-drawTrace(点数组:数组){
如果pointArray.count>1{
let模式:[CGFloat]=[10.0,10.0]
让path=CGMutablePath.init()
//从第一点开始。
path.move(到:pointArray[0])
//现在添加所有其他的。
对于1中的p..
您在哪里失败?向我们展示您的尝试。请将该代码添加到您的问题中。问题问得非常糟糕。Swift 3中的代码格式很差CGPathCreateCopyByDashingPath
已被path.copy(dashingWithPhase:Length:)
替换为path.copy(dashingWithPhase:Length:)
虽然这看起来不错,但对我来说,它缺少一些额外的信息,实际上可以帮助您在图像中生成路径。定义该曲线的点在哪里,“路径”从何而来?