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()
:
设置节点的 xScale 和 yScale 属性。这两个参数是节点及其子节点的宽度(对于 xScale)和高度(对于 yScale)相乘的比例因子。
代码示例:
spaceship.setScale(0.50) // decreased scale to it's half size
size()
:
表示精灵的尺寸(width和height),以磅为单位。
代码示例:
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)中绘制一个作为单个节点的圆点[关闭]