缩放 SKSpriteNode 而不缩放其子节点

Posted

技术标签:

【中文标题】缩放 SKSpriteNode 而不缩放其子节点【英文标题】:Scaling a SKSpriteNode without its children being scaled 【发布时间】:2014-09-13 02:32:47 【问题描述】:

我正在尝试以编程方式创建按钮。我将 SKSpriteNode 子类化,它的一个子类是 SKLabelNode。我这样做的原因是标签和按钮一起移动并且是一个单元。问题是,当我缩放按钮时,标签也会缩放,并且会扭曲文本,使其看起来像素化(非常可怕)。有没有办法,即使我必须重写整个东西,这样我就可以只缩放按钮?

【问题讨论】:

【参考方案1】:

在发布这个问题之前,我寻找这个答案大约一个小时,然后我发布这个问题的第二个,我找到了答案......难以置信!

设置父节点(SKSpriteNode)的大小会影响 Sprite 的大小,但不会影响子节点(标签)的大小。代码如下:

[button setSize:CGSizeMake(100, 200)]; //button is the SKSpriteNode

标签文本的大小可以与按钮大小的调整分开更改。这允许按钮的位置和它的文本保持链接,但它们的大小可以单独控制。正是我需要的。或许首先对 SKSpriteNode 进行子类化有更好的解决方案,但我想不出更好的方法来保持它们之间的联系,但又保持独立。

【讨论】:

【参考方案2】:

请允许我提供一个替代解决方案。假设精灵和标签是父母和孩子,如果你放大精灵:

sprite.scale = 1.25;

您只需将子标签缩小相同的数量:

label.scale = 0.75;

【讨论】:

我也想过这样做。我可能错了,但我注意到即使我每次都重新创建标签,它也会占用父级的比例乘数。有没有办法在不执行您建议的操作的情况下避免这种情况? ios 8 来得不够快。我希望他们可以更轻松地以编程方式构建菜单! 我知道这是一个超级迟到的评论,但在搜索我自己的解决方案时发现了这个,但这个解决方案不能像 1*1.25 = 1.251.25*0.75 != 1 一样工作。您必须将其乘以 0.8 或除以相同的总和 1.25*0.8 = 11.25/1.25 = 1

以上是关于缩放 SKSpriteNode 而不缩放其子节点的主要内容,如果未能解决你的问题,请参考以下文章

SKSpriteNode 没有正确缩放

调整和缩放 SKSpriteNode

更改 EaselJS 画布宽度而不缩放内容

SwiftUI 缩放视图而不影响几何

在 UIView 内缩放图像而不改变边界?

动态调整单个形状的大小而不缩放整个 SVG