【问题标题】:Drawing dashed line in Sprite Kit using SKShapeNode使用 SKShapeNode 在 Sprite Kit 中绘制虚线
【发布时间】:2015-01-21 17:06:32
【问题描述】:

I fount this solution but I can't make it into swift code

这就是我的尝试

var pattern[2]:CGFloat; this 

var dashed: CGPathRef = CGPathCreateCopyByDashingPath(CGPathCreateCopyByDashingPath(path, transform, phase, lengths, count);

var myShapeNode: SKShapeNode!;

        var CGPathCreateCopyByDashingPath:CGPathRef;

【问题讨论】:

  • 你在哪里失败了?向我们展示你的尝试。
  • 请将该代码添加到您的问题中。
  • 问题被问得很糟糕。代码格式不正确

标签: swift sprite-kit cgpath skshapenode


【解决方案1】:

这就是您如何快速绘制虚线的方法。您可以根据需要更改参数。

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)

【讨论】:

  • 在 Swift 3 中 CGPathCreateCopyByDashingPath 已被 path.copy(dashingWithPhase:lengths:) 取代
【解决方案2】:

在 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)

【讨论】:

    【解决方案3】:

    对于任何想弄清楚如何像我一样将相同的主体应用于 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()
    

    【讨论】:

      【解决方案4】:

      斯威夫特 5

      if let path = path?.copy(dashingWithPhase: 1, lengths: [5, 5]) {
          let line = SKShapeNode(path: path)
          line.strokeColor = .white
          self.addChild(line)
      }
      

      【讨论】:

      • 虽然这看起来很棒,但对我来说,它缺少一些额外的信息,这些信息实际上可以帮助您在图像中生成路径。定义该曲线的点在哪里,“路径”首先来自哪里?
      【解决方案5】:

      添加到上面 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)
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-08-24
        • 2014-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多