如何从SWIFT中的SKSpriteNode创buildCGPath

我有一个SKSpriteNode与电平生成器创build。

square1

我需要使用CGPath创build完全相同的形状。

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 position(52.8359451293945,-52.9375076293945)

为了检查我的CGPath是否已经创build,我用CGPath创build了一个SKShapeNode:

 let shape:SKShapeNode=SKShapeNode(path:path) shape.fillColor = self.getRandomColor() addChild(shape) print(shape.position) 

=>形状位置(52.8359451293945,-52.9375076293945)

结果不是我所期望的。

在这里输入图像说明

所以我不知道我的CGPath是否是错误的,或者是当我在SKShapeNode中转换它,我失去了初始的精灵属性。

为了理解为什么我需要这样做,请阅读这个堆栈

编辑1,2

我补充说:

 shape.position = self.firstSquare.position 

我得到了:

在这里输入图像说明

编辑3:

我上面更新了我的解释,现在我的firstSquare的定位点(0.5,0.5)

通常我不使用.SKS文件,我只想写只有代码,但在这里看起来你只是有两个方块,一个是原始的.sks位置,另一个是没有任何位置的第二个。

如果你想简单地覆盖你的第一个广场:

 shape.position = self.firstSquare.position 

编辑

我也看到你的anchorPoint被设置为(0.0,0.0),但是默认的锚点是(0.5,0.5)。 尝试纠正这个参数来匹配你的sks。

你的尺寸布局可能和场景不一样,所以:

 scene.size = skView.bounds.size 

在展示你的场景之前,请看一下这个参数的改变:

 scene.scaleMode = .ResizeFill 

实际上,缩放模式也影响到定位。

什么是scaleMode

场景的scaleMode决定如何在iOS设备旋转时更新场景以填充视图。 有四种不同的scaleModes定义:

SKSceneScaleModeFill – x轴和y轴分别放大或缩小,以便场景填充视图。 场景的内容不会保持当前的宽高比。 如果不为场景指定scaleMode,则这是默认值。

SKSceneScaleModeAspectFill – 计算x和y比例因子。 将使用更大的比例因子。 这确保视图将被填充,但通常会导致部分场景被裁剪。 场景中的图像通常会放大,但会保持正确的宽高比。

SKSceneScaleModeAspectFit – 计算x和y比例因子。 较小的比例因子将被使用。 这确保整个场景可见,但通常情况下会导致场景信箱。 场景中的图像通常会缩小,但会保持正确的宽高比。

SKSceneScaleModeResizeFill – 场景不缩放。 它只是resize,以使其符合观点。 由于场景不缩放,图像将保持其原始大小和宽高比。 内容将全部保持相对于场景原点(左下angular)。

我find了一个解决scheme,我需要使用SKShapeNode(path :,居中:) ,然后应用转换并设置位置。

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