我有一个级别生成器的SKSpriteNode创建。

我需要使用CGPath创建完全相同的形状。
self.firstSquare = childNodeWithName("square") as! SKSpriteNode
var transform = CGAffineTransformMakeRotation(self.firstSquare.zRotation)
let rect = CGRect(origin: self.firstSquare.position, size: self.firstSquare.size)
let firstSquareCGPath:CGPath=CGPathCreateWithRect(rect, &transform)
print(self.firstSquare.position)=> firstSquare位置(52.8359451293945,-52.9375076293945)
为了检查我的CGPath是否按我的要求创建,我用SKShapeNode创建了一个CGPath:
let shape:SKShapeNode=SKShapeNode(path:path)
shape.fillColor = self.getRandomColor()
addChild(shape)
print(shape.position)=>形状位置(52.8359451293945,-52.9375076293945)
结果并不如我所料。

因此,我不知道我的CGPath是否错了,或者当我在SKShapeNode中转换它时,我失去了最初的sprite属性。
编辑1,2
我补充说:
shape.position = self.firstSquare.position我得到了:

编辑3:
我更新了上面的解释,我的firstSquare的锚点现在是(0.5,0.5)
发布于 2016-07-15 20:52:07
我找到了一个解决方案,我需要使用SKShapeNode(路径:,居中:),然后应用转换并设置位置。
self.firstSquare = childNodeWithName("square") as! SKSpriteNode
let firstSquareCGPath:CGPath=CGPath(rect: CGRect(origin: self.firstSquare.position, size: self.firstSquare.size), transform: nil)
let shape:SKShapeNode=SKShapeNode(path: firstSquareCGPath, centered: true) //important
shape.zRotation = self.firstSquare.zRotation
shape.position = self.firstSquare.position
shape.fillColor = SKColor.blue()
addChild(shape)它工作得很完美!
只是一个悬而未决的问题,当我在最后(由于SKShapeNode属性)设置转换和位置时,我不知道上面的CGPath设置是否正确(就像我的SKSpriteNode)。
发布于 2016-06-18 14:13:11
通常我不使用.SKS文件,我只编写代码,但这里似乎只有两个方格,一个带有原始的.sks位置,另一个在第二次添加时没有任何位置。
如果您想简单地覆盖您的第一个方块:
shape.position = self.firstSquare.position编辑
我还看到您的anchorPoint被设置为(0.00.0),但是默认的锚点是(0.5,0.5)。请尝试更正此参数以与您的sks匹配。
您的.sks大小布局可能与场景不一样,因此:
scene.size = skView.bounds.size在您呈现场景之前,也请查看此参数以更改:
scene.scaleMode = .ResizeFill 事实上,规模模式对定位也有影响。
scaleMode是什么?
场景的scaleMode确定如何更新场景以在旋转iOS设备时填充视图。定义了四种不同的scaleModes:
SKSceneScaleModeFill -x轴和y轴都是向上或向下缩放的,以便场景填充视图。场景的内容不会保持其当前的纵横比。如果您没有为场景指定一个scaleMode,这是默认的。
SKSceneScaleModeAspectFill -同时计算了x和y标度因子.将使用更大的比例系数。这将确保视图将被填充,但通常会导致部分场景被裁剪。场景中的图像通常会被放大,但会保持正确的高宽比。
SKSceneScaleModeAspectFit -同时计算了x和y标度因子.将使用较小的比例系数。这将确保整个场景将是可见的,但通常会导致现场被字母框。场景中的图像通常会被缩小,但会保持正确的高宽比。
SKSceneScaleModeResizeFill -场景没有缩放。它只是简单地调整大小,使其适合视图。由于场景没有缩放,图像将保持原来的大小和高宽比。内容将保持相对于场景原点(左下角)。
https://stackoverflow.com/questions/37897837
复制相似问题