如何从SWIFT中的SKSpriteNode创建CGPath

时间:2016-06-18 14:05:03

标签: ios swift sprite-kit skspritenode cgpath

我有一个使用关卡生成器创建的SKSpriteNode。

square1

我需要使用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是否已按我的意愿创建,我使用我的CGPath创建了一个SKShapeNode:

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

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

结果不是我的预期。

enter image description here

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

要了解我需要这样做的原因,请阅读this stack

编辑1,2

我补充说:

shape.position = self.firstSquare.position

我获得了:

enter image description here

编辑3:

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

2 个答案:

答案 0 :(得分:1)

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

如果您想简单地覆盖第一个方格:

shape.position = self.firstSquare.position

修改

我还看到你的anchorPoint被设置为(0.0,0.0),但默认的锚点是(0.5,0.5)。尝试更正此参数以匹配您的sk。

你的.sks尺寸布局可能与场景不同,所以:

scene.size = skView.bounds.size

在演示场景之前,请先查看此参数:

scene.scaleMode = .ResizeFill 

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

  

什么是scaleMode

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

SKSceneScaleModeFill - 每个x和y轴都按比例放大或缩小,以便场景填充视图。场景的内容将不会保持其当前的宽高比。如果您没有为场景指定scaleMode,则这是默认设置。

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

SKSceneScaleModeAspectFit - 计算x和y比例因子。将使用较小的比例因子。这样可以确保整个场景可见,但通常会导致场景被设置为letterboxed。场景中的图像通常会按比例缩小,但会保持正确的宽高比。

SKSceneScaleModeResizeFill - 场景未缩放。它只是调整大小,以适应视图。由于场景未缩放,因此图像将保持原始大小和宽高比。内容将全部保持相对于场景原点(左下角)。

答案 1 :(得分:0)

我找到了一个解决方案,我需要使用SKShapeNode(path:, centered:),然后应用转换并设置位置。

+RTS -p

完美无缺!

只是一个悬而未决的问题,因为我设置了转换和最后的位置(因为SKShapeNode属性),我不知道上面的CGPath是否设置正确(就像我的SKSpriteNode)。 / em>的