如何将 SkLabelNode 中的文本居中

How to center the text inside the SkLabelNode

我不是这个意思: Label.horizontalAlignmentMode = SKLabelNode Horizo​​ntalAlignmentModeCenter

或者 Label.verticalAlignmentMode =

SKLabelNodes 是简单的、几乎不可编辑的文本到位图的非常原始的渲染,并在屏幕上显示出来。他们不是为了解决大的设计问题....所以他们对他们的 "frame".

没有任何意识

话虽如此...它们是 SKNode 的子类,后者具有 frame 属性,但这与您对设计应用程序或页面中的框架的看法不同编写应用程序或其他任何东西......从文档中,它是一个节点:

The frame is the smallest rectangle that contains the node’s content, taking into account the node’s xScale, yScale, and zRotation properties. Not all nodes contain content of their own.

这很有用,因为它有一些方便的吸气剂。您可以获得 widthheightmaxXmaxY 以及 minXminY 以及 midXmidY,也是。

因此,从理论上讲,您可以根据文本标签在场景中占据的帧的这些便利编号,使用它们来帮助您将文本内容相对于其他内容居中。

但那不会很有趣。

相反,您可以创建一个与文本尺寸完全相同的虚拟 SKSpriteNode,用 SKColor.clear 填充它,这样它就不会被看到并且在渲染方面不会花费您任何费用,并且然后将您的文本节点添加到这个虚拟 SKSpriteNode,作为它的子节点。

现在您有了 SKSpriteNode 的原点 (anchor point) 可用作将文本节点定位到您喜欢的任何位置的指南,并且每当您更改文本的大小时,使用 willSet 到调整 SKSpriteNode 的大小以匹配它。这样您的 origin/anchor 将始终如您所愿地工作。

这里有更聪明的头脑,可以想出更好的方法来做这类事情,但这是我在 3D 设计应用程序中习惯使用的让文本表现良好的技巧。