任何关于使用SpriteKit渲染引擎的建议,但具有编程绘制游戏图形的能力。这些图形很简单,但略比矩形和椭圆形复杂。
最近,我发现SKShapeNode在使用自定义路径时对复杂性有了限制。基本上,我有一个函数,用一个数字来生成随机的CGPath形状,这个数字越大,形状的细节就越复杂。当我使用一个较小的数字时,没有问题,但是当我使用更大的数字来生成更复杂的路径时,SKShapeNode给出了这个错误。(我也用iOS9.2.1在真正的设备上进行了测试)
断言失败:(长度+偏移量<= _length)
现在,我不认为使用SKShapeNode是个好主意,因此,对于以编程方式绘制能够与SpriteKit很好地工作的图形有任何建议吗?
我在其他地方读到,它使用任何可用的图形API绘制,只要它可以转换成SKTexture可以初始化的格式,这是正确的方法吗?
发布于 2016-02-03 14:22:11
如果要使用SKTexture,可以使用CGContext绘制图表。
首先,您需要创建图表点的数组,如:
let pathPoints: [CGPoint] = [...] 然后,您需要调用UIGraphicsBeginImageContext(rect.size),其中rect.size是CGSize对象,该对象确定将在其中刻有图表的区域的大小,而rect是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对象:
let pathTexture = SKTexture(image: image)
let pathNode = SKSpriteNode(texture: pathTexture)
pathNode.position = CGPointMake(rect.origin.x + rect.width/2 - lineWidth/2, rect.origin.y + rect.height/2 - lineWidth/2)
pathNode.zPosition = 0
someParrentNodeThatOnScene.addChild(pathNode)
UIGraphicsEndImageContext()这就是你创建图表所需的全部。
https://stackoverflow.com/questions/35145679
复制相似问题