首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SpriteKit并以编程方式绘制简单的图形

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

Stack Overflow用户
提问于 2016-02-02 05:26:00
回答 1查看 793关注 0票数 1

任何关于使用SpriteKit渲染引擎的建议,但具有编程绘制游戏图形的能力。这些图形很简单,但略比矩形和椭圆形复杂。

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

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

Related Question

现在,我不认为使用SKShapeNode是个好主意,因此,对于以编程方式绘制能够与SpriteKit很好地工作的图形有任何建议吗?

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

EN

回答 1

Stack Overflow用户

发布于 2016-02-03 14:22:11

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

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

代码语言:javascript
复制
let pathPoints: [CGPoint] = [...] 

然后,您需要调用UIGraphicsBeginImageContext(rect.size),其中rect.sizeCGSize对象,该对象确定将在其中刻有图表的区域的大小,而rectCGRect对象。下一步是创建CGContextRef并设置:

代码语言:javascript
复制
UIGraphicsBeginImageContext(size)
let context: CGContextRef = UIGraphicsGetCurrentContext()!
CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor);
CGContextSetLineWidth(context, lineWidth)

其中lineWidthCGFloat类型值。

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

代码语言:javascript
复制
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)

然后,您需要创建这样的图像表单上下文:

代码语言:javascript
复制
let image = UIGraphicsGetImageFromCurrentImageContext()

然后创建纹理表单image,并将其用于将添加到场景中的SKSpriteNode对象:

代码语言:javascript
复制
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()

这就是你创建图表所需的全部。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35145679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档