首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SWIFT中从CGPath中创建SKSpriteNode

如何在SWIFT中从CGPath中创建SKSpriteNode
EN

Stack Overflow用户
提问于 2016-06-18 14:05:02
回答 2查看 1.1K关注 0票数 2

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

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

代码语言:javascript
运行
复制
   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:

代码语言:javascript
运行
复制
let shape:SKShapeNode=SKShapeNode(path:path)
shape.fillColor = self.getRandomColor()
addChild(shape)
print(shape.position)

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

结果并不如我所料。

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

要理解我为什么要这么做,请阅读https://stackoverflow.com/questions/37861876/build-a-grid-level-for-a-game-with-spritekit-and-swift?noredirect=1#comment63206757_37861876

编辑1,2

我补充说:

代码语言:javascript
运行
复制
shape.position = self.firstSquare.position

我得到了:

编辑3:

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-15 20:52:07

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

代码语言:javascript
运行
复制
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)。

票数 0
EN

Stack Overflow用户

发布于 2016-06-18 14:13:11

通常我不使用.SKS文件,我只编写代码,但这里似乎只有两个方格,一个带有原始的.sks位置,另一个在第二次添加时没有任何位置。

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

代码语言:javascript
运行
复制
shape.position = self.firstSquare.position

编辑

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

您的.sks大小布局可能与场景不一样,因此:

代码语言:javascript
运行
复制
scene.size = skView.bounds.size

在您呈现场景之前,也请查看此参数以更改:

代码语言:javascript
运行
复制
scene.scaleMode = .ResizeFill 

事实上,规模模式对定位也有影响。

scaleMode是什么?

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

SKSceneScaleModeFill -x轴和y轴都是向上或向下缩放的,以便场景填充视图。场景的内容不会保持其当前的纵横比。如果您没有为场景指定一个scaleMode,这是默认的。

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

SKSceneScaleModeAspectFit -同时计算了x和y标度因子.将使用较小的比例系数。这将确保整个场景将是可见的,但通常会导致现场被字母框。场景中的图像通常会被缩小,但会保持正确的高宽比。

SKSceneScaleModeResizeFill -场景没有缩放。它只是简单地调整大小,使其适合视图。由于场景没有缩放,图像将保持原来的大小和高宽比。内容将保持相对于场景原点(左下角)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37897837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档