我有一个使用关卡生成器创建的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是否已按我的意愿创建,我使用我的CGPath创建了一个SKShapeNode:
let shape:SKShapeNode=SKShapeNode(path:path)
shape.fillColor = self.getRandomColor()
addChild(shape)
print(shape.position)
=>形状位置(52.8359451293945,-52.9375076293945)
结果不是我的预期。
因此,我不知道我的CGPath是否错误,或者当我在SKShapeNode中转换它时,我失去了初始精灵属性。
要了解我需要这样做的原因,请阅读this stack
编辑1,2
我补充说:
shape.position = self.firstSquare.position
我获得了:
编辑3:
我更新了上面的解释,我的firstSquare的锚点现在是(0.5,0.5)
答案 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>的