调整SKShapeNode框架的大小,或替代

时间:2016-11-14 00:17:20

标签: ios swift sprite-kit

此问题与此相关:Set SKShapeNode frame to calculateAccumutedFrame

有没有办法调整SKShapeNode框架的大小。我不想缩放它,(建议在这里:Resizing a SKShapeNode)。使用任何比例函数使其内容缩小并调整大小(200x200的线宽不同于50x50)

我需要一个框架并将其设置为特定大小。例如:

shape.frame = CGRect(...)

不能这样做,因为frame是get-only。我试图覆盖calculateAccumulatedFrame,但没有做任何事情(参见顶部链接)。

有人可以建议替代SKShapeNode的相同功能,而不是中途构建...或者实际更改框架的方法。我需要的基本功能是创建一个弧(在顶部链接的图片中看到)并在某种SKNode中使用它,所以我可以调整大小,缩小它等等,就像使用SKSpriteNode一样

2 个答案:

答案 0 :(得分:4)

SKShapeNode是基于核心图形路径(CGPath)的node

因此,没有直接的缩放方法可以根据您的需要进行缩放。 例如,如果您使用SKSpriteNode,则会执行resizeByWidthresizeToWidth等操作。

但是关于类似节点的节点,您应该考虑他,因为您必须使用方法like调整CGPathUIBezierPath的大小:

apply(_ transform: CGAffineTransform)

或直接重建您的路径,例如:

let π:CGFloat = CGFloat(M_PI)
let startAngle: CGFloat = 3 * π / 4
let endAngle: CGFloat = π / 4
myShape.path = UIBezierPath(arcCenter: CGPoint.zero, radius: 33.5, startAngle: startAngle, endAngle: endAngle, clockwise: true).cgPath

答案 1 :(得分:-2)

我建议你从SKShapeNode中创建一个SKSpriteNode,因为SKShapeNode是错误的。

let node = SKNode()
node.addChild(shapeNode) //we do this because of the bugs with SKShapeNode
let texture = view.textureFromNode(node, crop:node.calculateAccumulatedFrame)

let spriteNode = SKSpriteNode(texture:texture)

或者,我会查找将此纹理保存到磁盘的方法,这样您就不必每次都渲染该形状。