Центрировать SKLabelNode на SKSpriteNode

У меня есть SKLabelNode, который является дочерним элементом SKSpriteNode, потому что я пытаюсь создать класс Button для более простого создания кнопок. Я пробовал пару вещей, используя точку привязки SKSpriteNode, но я не совсем понимаю, что происходит. Как центрировать метку на спрайте (это родительский узел)?


person 02fentym    schedule 13.09.2014    source источник
comment
Если вы покажете, что вы уже пробовали, это поможет нам помочь вам.   -  person Mick MacCallum    schedule 13.09.2014
comment
Спасибо за быстрый ответ. Я на самом деле только что понял, как это сделать. Я установил режимы выравнивания (горизонтальный и вертикальный) метки, и теперь она идеально центрирована, независимо от размера текста метки! Я опубликую ниже.   -  person 02fentym    schedule 13.09.2014
comment
@ 02fentym, мы бы хотели, чтобы вы показали свое решение кода, а не просто излагали тот факт, что вы решили вопрос, который задали, не показывая решения.   -  person Shawn J. Molloy    schedule 19.05.2015
comment
Я сделал... это ниже. Я сам ответил на вопрос.   -  person 02fentym    schedule 20.05.2015


Ответы (3)


Я понял, как это решить... вот что я сделал. Имейте в виду, что у меня есть класс Button, который является подклассом SKSpriteNode.

В классе Button.m у меня есть переменная экземпляра с именем label, которая является SKLabelNode. Я добавляю узел метки в качестве дочернего элемента кнопки, а затем устанавливаю режимы горизонтального и вертикального выравнивания по центру.

label = [[SKLabelNode alloc] init];
[self addChild:label];
[label setHorizontalAlignmentMode:SKLabelHorizontalAlignmentModeCenter];
[label setVerticalAlignmentMode:SKLabelVerticalAlignmentModeCenter];
person 02fentym    schedule 13.09.2014
comment
Хорошо, но как убедиться, что спрайт внешней (спрайтовой) кнопки будет достаточно большим для текста? - person trojanfoe; 22.04.2015

Это поместит вашу метку в центр сцены в наборе спрайтов:

yourLabel.horizontalAlignmentMode = .Center;
yourLabel.verticalAlignmentMode = .Center
person guest    schedule 24.06.2015

Свифт 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)

}
person Saranjith    schedule 31.12.2018
comment
Хотя это может ответить на вопрос авторов, в нем отсутствуют поясняющие слова и/или ссылки на документацию. Необработанные фрагменты кода не очень полезны, если вокруг них нет фраз. Вы также можете найти очень полезным как написать хороший ответ. Пожалуйста, отредактируйте свой ответ. - person Roy Scheffers; 31.12.2018