有关使用SpriteKit渲染引擎的任何建议,但能够以编程方式绘制游戏图形。这些图形很简单,但比矩形和椭圆形稍微复杂。
我最近发现SKShapeNode
在使用自定义路径时对复杂性有上限。我基本上有一个函数,它使用一个数字来生成随机CGPath
形状,数字越大,形状越复杂,细节越多。当我使用较小的数字时,没有问题,但当我使用较大的数字来生成更复杂的路径时,SKShapeNode
会给我这个错误。 (我在iOS9.2.1的真实设备上进行了测试)
断言失败:(长度+偏移< = _length)
现在我不认为使用SKShapeNode
是一个好主意,所以任何关于以编程方式绘制能够与SpriteKit良好协作的图形的建议?
我在其他地方使用任何可用的图形API读取,只要它可以转换为SKTexture
可以初始化的格式,是正确的方法吗?
答案 0 :(得分:1)
如果您使用SKTexture
,则可以使用CGContext
绘制图表。
首先,你需要创建图表点数组,如:
let pathPoints: [CGPoint] = [...]
然后,您需要致电UIGraphicsBeginImageContext(rect.size)
,其中rect.size
是CGSize
对象,该对象决定了将在其中标记图表的区域的大小,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
这就是创建图表所需的一切。