填充从CGPath创建的SKShapeNode

时间:2015-10-23 10:30:06

标签: swift sprite-kit fill cgpath skshapenode

我正在尝试基于点阵列创建自定义SKShapeNode。 这些点形成一个封闭的形状,最终需要填充形状。

这是我到目前为止所提出的,但由于某种原因,笔画很好但形状仍然是空的。我错过了什么?

override func didMoveToView(view: SKView)
{
    let center = CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))
    let path = CGPathCreateMutable()


    CGPathMoveToPoint(path, nil, center.x, center.y)
    CGPathAddLineToPoint(path, nil, center.x + 50, center.y + 50)

    CGPathMoveToPoint(path, nil, center.x + 50, center.y + 50)
    CGPathAddLineToPoint(path, nil, center.x - 50, center.y + 50)

    CGPathMoveToPoint(path, nil, center.x - 50, center.y + 50)
    CGPathAddLineToPoint(path, nil, center.x - 50, center.y - 50)

    CGPathMoveToPoint(path, nil, center.x - 50, center.y - 50)
    CGPathAddLineToPoint(path, nil, center.x, center.y)

    CGPathCloseSubpath(path)

    let shape = SKShapeNode(path: path)
    shape.strokeColor = SKColor.blueColor()
    shape.fillColor = SKColor.redColor()
    self.addChild(shape)
}

2 个答案:

答案 0 :(得分:1)

List[String]出了问题。您通常会调用path来设置路径的起点,然后进行一系列CGPathMoveToPoint调用以将路段添加到路径中。尝试像这样创建它:

CGPathAdd*

阅读CGPath Reference(搜索let path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, center.x, center.y) CGPathAddLineToPoint(path, nil, center.x + 50, center.y + 50) CGPathAddLineToPoint(path, nil, center.x - 50, center.y + 50) CGPathAddLineToPoint(path, nil, center.x - 50, center.y - 50) CGPathCloseSubpath(path) )了解详情。

答案 1 :(得分:0)

例如,您不需要使用CGPath进行此操作,您可以这样做:

let points: [CGPoint] = [CGPointMake(center.x, center.y), ...] // All your points
var context: CGContextRef = UIGraphicsGetCurrentContext()

CGContextAddLines(context, points, UInt(points.count))
CGContextSetFillColorWithColor(context, UIColor.redColor().CGColor)
CGContextFillPath(context)

let shape = SKShapeNode(path: CGContextCopyPath(context))
...