SpriteKit 和 Swift 中 SKSpriteNodes 的 setScale 和 size 有啥区别?

Posted

技术标签:

【中文标题】SpriteKit 和 Swift 中 SKSpriteNodes 的 setScale 和 size 有啥区别?【英文标题】:What's the difference of setScale and size of SKSpriteNodes in SpriteKit and Swift?SpriteKit 和 Swift 中 SKSpriteNodes 的 setScale 和 size 有什么区别? 【发布时间】:2016-07-29 14:59:10 【问题描述】:

我试图从 PNG 图像中设置 SKSpriteNode 的大小(可以,只是:

test = SKSpriteNode(imageNamed: "myImage")

但是在调整大小时,我不确定我应该使用test.setScale 还是test.size。 有什么区别,我应该什么时候使用它们?

【问题讨论】:

【参考方案1】:

setScale():

设置节点的 xScaleyScale 属性。这两个参数是节点及其子节点的宽度(对于 xScale)和高度(对于 yScale)相乘的比例因子。

代码示例:

spaceship.setScale(0.50) // decreased scale to it's half size

size(): 表示精灵的尺寸widthheight),以磅为单位。

代码示例:

spaceship.size = CGSizeMake(100.0, 70.0) // Re-size the dimensions to these values

什么时候使用setScale,什么时候使用size

通常setScale 用于增加或减少精灵的比例因子,例如SKAction.scaleTo 用于放大或缩小。

size 经常使用,因为您可以用点表示您想要对您的精灵执行的确切值。

【讨论】:

【参考方案2】:

当您想要更改 SKSpriteNode 的特定大小而不影响该 sprite 节点的任何子节点的大小时,您应该使用 size。

缩放精灵节点不仅改变节点的大小(比例),它还适当地(按比例)缩放精灵节点的所有子节点。

如果精灵节点没有子节点,那么大小和比例之间没有实际区别。

注意:我发现在无关紧要的情况下使用 size 很有帮助,这样我就知道 1.0 的比例始终是默认大小 - 对于使用 scaleTo 而不是 scaleBy 并再次返回默认大小的动画来说很方便。

【讨论】:

【参考方案3】:

如果您使用的是 spriteNode,我会使用 .setScale、或 .xScale 或 .yScale,因为它们是专门用于 sprites 的。 .size 也可用于 UIKit 中标签和文本视图的大小。

假设您希望精灵大 2 倍:

theNode.xScale = 2.0
theNode.yScale = 2.0

请注意,它们必须是浮点数,而不是整数

总而言之,.setScale 适用于 spriteNodes 和一般图像,而 .size 适用于大量非图像的东西,例如标签等。因此,如果您使用的是精灵,请使用 .setScale。如果要调整块的大小,请使用 .size。

如果您认为这是正确答案,请将其标记为正确答案,以便帮助其他人解决此问题。谢谢!

【讨论】:

【参考方案4】:

我总是使用.size 属性调整大小,因为我相信当您使用.setScale / .xScale / .yScale 时,节点的物理体不会自动缩放。如果缩放节点,则需要重做physicsBody 的大小。

【讨论】:

以上是关于SpriteKit 和 Swift 中 SKSpriteNodes 的 setScale 和 size 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 和 SpriteKit 中使用 UISwipeGestureRecognizer 而不是 touchesMoved?

将 AcceptMouseMovedEvents 用于带有 Storyboard 和 Swift 的 SpriteKit 鼠标操作

Swift / Spritekit:通过特定场景播放音乐

如何在swift(SpriteKit)中绘制一个作为单个节点的圆点[关闭]

在 Swift SpriteKit 中禁用节点和 FPS 标签

Swift、SpriteKit 和带有 CGPoint 的多维数组