这部分是SKShapeNode

var rect = CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 30, height: 30))

self.path = CGPathCreateWithRect(rect, nil)




let rect = SKShapeNode(rectOfSize: CGSize(width: 30, height: 30))


它们在模拟器中的行为似乎有所不同,我想知道它们是否在任何方面都不同。

最佳答案

SKShapeNode的原点(0,0)是节点的中心,并且相对于该点绘制了路径。因此,使用以下CGRect创建的形状节点

CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: 30, height: 30))


将以其左下角在形状节点的中心进行绘制。

便捷方法SKShapeNode(rectOfSize...)通过将originCGRect自变量偏移矩形宽度和高度的一半来使rect在形状节点中居中。在这种情况下,rect的origin为(-15,-15)。

您可以通过偏移其原点来创建以CGRect为中心的SKShapeNode

let height = CGFloat(30)
let width = CGFloat(30)
let anchorPoint = CGPoint(x:0.5, y:0.5)

CGRect(origin: CGPoint(x: -width*anchorPoint.x, y: -height*anchorPoint.y), size: CGSize(width: width, height: height))


其中anchorPoint定义了相对的“精灵中与节点位置相对应的点”。

您也可以使用SKShapeNode(path:path, centered:true),它将使用其边界框将路径居中。

关于swift - SpriteKit中的这两个语句有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31764124/

10-12 19:25