Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting SKLabelNode to centre of SKSpriteNode Swift

I'm trying to set a SKLabelNode's position to the center of a SKSpriteNode. I've looked at other questions on this but none of these work with Swift 3.

This is my code:

    var letter1background = SKSpriteNode(imageNamed: "letterbackground")
    var letter1text = SKLabelNode()

    override func didMove(to view: SKView) {


        letter1background.position = CGPoint(x: self.size.width / 8, y: self.size.height / 7.5)
        letter1background.size = CGSize(width: self.size.width / 8, height: self.size.width / 8)
        letter1background.zPosition = -5

        self.addChild(letter1background)

        letter1text.text = "C"
        letter1text.fontName = "Verdana-Bold "
        letter1text.fontSize = 28
        letter1text.fontColor = UIColor.white
       letter1text.zPosition = 0
       letter1text.horizontalAlignmentMode = letter1background.center
        letter1text.verticalAlignmentMode = letter1background.center

        self.letter1background.addChild(letter1text)


    }

This code looks like it would work but in Swift 3 I now get this error:

Value of type 'SKSpriteNode' has no member 'center'

I have also tried:

self.letter1text.position = CGPoint(x: letter1background.frame.width/2 - (letter1text.frame.width/2), y: letter1background.frame.height/2 -(letter1text.frame.height/2))

&

letter1text.position = CGPoint(x:letter1background.frame.midX, y:letter1background.frame.midY)

But I still get results like this: iphone screen

Any ideas?

like image 374
Niall Kehoe Avatar asked Dec 02 '16 19:12

Niall Kehoe


1 Answers

Your calculations of label's position are wrong. You just have to add a label to the at 0,0 position and it will be centered because of SpriteKit's coordinate system rules (0,0 is at the center of the node).

override func didMove(to view: SKView) {

        let label = SKLabelNode(fontNamed: "Arial")

        label.text = "C"
        label.fontColor = .black
        label.verticalAlignmentMode = .center
        label.fontSize = 29.0
        label.zPosition = 1


        let background = SKSpriteNode(color: .green, size: CGSize(width: 50, height: 50))

        background.addChild(label)

        addChild(background)

    }

And you will get this:

enter image description here

like image 99
Whirlwind Avatar answered Sep 20 '22 14:09

Whirlwind