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:)
虽然这看起来不错,但对我来说,它缺少一些额外的信息,实际上可以帮助您在图像中生成路径。定义该曲线的点在哪里,“路径”从何而来?