gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:50:10 25 4
gpt4 key购买 nike

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

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

Assertion failed: (length + offset <= _length)

Related Question

现在我不认为使用 SKShapeNode 是个好主意,所以关于以编程方式绘制能够很好地与 SpriteKit 一起工作的图形有什么建议吗?

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

最佳答案

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

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

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

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

UIGraphicsBeginImageContext(size)
let context: CGContextRef = UIGraphicsGetCurrentContext()!
CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor);
CGContextSetLineWidth(context, lineWidth)

其中lineWidthCGFloat类型的值。

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

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()

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

关于swift - SpriteKit 并以编程方式绘制简单图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35145679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com