SpriteKit并以编程方式绘制简单的图形

时间:2016-02-02 05:26:00

标签: swift sprite-kit swift2

有关使用SpriteKit渲染引擎的任何建议,但能够以编程方式绘制游戏图形。这些图形很简单,但比矩形和椭圆形稍微复杂。

我最近发现SKShapeNode在使用自定义路径时对复杂性有上限。我基本上有一个函数,它使用一个数字来生成随机CGPath形状,数字越大,形状越复杂,细节越多。当我使用较小的数字时,没有问题,但当我使用较大的数字来生成更复杂的路径时,SKShapeNode会给我这个错误。 (我在iOS9.2.1的真实设备上进行了测试)

  

断言失败:(长度+偏移< = _length)

Related Question

现在我不认为使用SKShapeNode是一个好主意,所以任何关于以编程方式绘制能够与SpriteKit良好协作的图形的建议?

我在其他地方使用任何可用的图形API读取,只要它可以转换为SKTexture可以初始化的格式,是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您使用SKTexture,则可以使用CGContext绘制图表。

首先,你需要创建图表点数组,如:

let pathPoints: [CGPoint] = [...] 

然后,您需要致电UIGraphicsBeginImageContext(rect.size),其中rect.sizeCGSize对象,该对象决定了将在其中标记图表的区域的大小,rect为{{1}对象。下一步是创建CGRect并设置:

CGContextRef

其中UIGraphicsBeginImageContext(size) let context: CGContextRef = UIGraphicsGetCurrentContext()! CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor); CGContextSetLineWidth(context, lineWidth) lineWidth类型值。

在此之后,您可以在上下文中创建图表:

CGFloat

然后你需要创建像这样的图像形式上下文:

if pathPoints.count > 1 {
    CGContextMoveToPoint(context, pathPoints.first!.x, pathPoints.first!.y)
    for var i = 1; i < pathPoints.count; ++i {
        CGContextAddLineToPoint(context, pathPoints[i].x, pathPoints[i].y)
    }
}
CGContextStrokePath(context)

然后创建纹理表单let image = UIGraphicsGetImageFromCurrentImageContext() 并将其用于将添加到场景中的image对象:

SKSpriteNode

这就是创建图表所需的一切。