将SKLabelNode居中于SKSpriteNode上

12

我有一个SKLabelNode,它是SKSpriteNode的子节点,因为我正在尝试创建一个Button类,以更轻松地创建按钮。我尝试过使用SKSpriteNode的锚点来做一些事情,但我不太明白到底发生了什么。如何将标签居中于精灵(其父节点)上?


如果您展示出您已经尝试过的内容,我们可以更好地帮助您。 - Mick MacCallum
2
谢谢您的快速回复。我实际上刚刚想出了如何做到这一点。我设置了标签的对齐模式(水平和垂直),现在无论标签文本的大小如何,它都是完美居中的!我会在下面发布代码。 - 02fentym
@02fentym,我们希望您能展示您的代码解决方案,而不仅仅是阐述您解决了一个问题,但没有展示解决方案。 - Shawn J. Molloy
1
我已经完成了,下面是答案。我自己回答了这个问题。 - 02fentym
3个回答

17

我意识到如何解决这个问题...这是我所做的。请记住,我有一个名为Button的类,它是SKSpriteNode的子类。

在Button.m类中,我有一个实例变量称为label,它是SKLabelNode。我将标签节点添加为按钮的子节点,然后将水平和垂直对齐模式设置为居中。

label = [[SKLabelNode alloc] init];
[self addChild:label];
[label setHorizontalAlignmentMode:SKLabelHorizontalAlignmentModeCenter];
[label setVerticalAlignmentMode:SKLabelVerticalAlignmentModeCenter];

2
好的,但是你如何确保外部(精灵)按钮精灵足够大以适应文本? - trojanfoe

13

这将使你的标签在 Sprite Kit 场景中居中:

yourLabel.horizontalAlignmentMode = .Center;
yourLabel.verticalAlignmentMode = .Center

4

Swift 4.2 XCode 10.1

将此函数复制到您的SpriteKit类中:

func createLabel(text: String) {

    // initialisation
    let label = SKLabelNode(fontNamed: "Wicked Mouse")

    // customisation
    label.text = text
    label.fontColor = .white
    label.fontSize = 30.0

    // positioning
    label.position = CGPoint(x: self.size.width / 2, y: self.size.height / 2)
    label.verticalAlignmentMode = .center
    label.horizontalAlignmentMode = .center
    label.zPosition = 1
    
    self.addChild(label)

}

虽然这可能回答了作者的问题,但它缺少一些解释性的词语和/或文档链接。裸代码片段没有周围的一些短语是不太有帮助的。您也可以在如何撰写一个好的答案中找到很多帮助。请编辑您的答案。 - Roy Scheffers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接