将 SKLabelNode 设置为 SKSpriteNode Swift 的中心

Posted

技术标签:

【中文标题】将 SKLabelNode 设置为 SKSpriteNode Swift 的中心【英文标题】:Setting SKLabelNode to centre of SKSpriteNode Swift 【发布时间】:2016-12-02 19:44:41 【问题描述】:

我正在尝试将 SKLabelNode 的位置设置为 SKSpriteNode 的中心。 我已经查看了其他问题,但这些都不适用于 Swift 3。

这是我的代码:

    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)


    

这段代码看起来可以工作,但在 Swift 3 中我现在收到此错误:

“SKSpriteNode”类型的值没有成员“中心”

我也试过了:

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)

但我仍然得到这样的结果:

有什么想法吗?

【问题讨论】:

Centre a SKLabelNode on a SKSpriteNode的可能重复 @NiallKehoe SKSpriteNode 据我所知,从未有过名为center 的属性。这是特定于视图的属性,而不是节点。 【参考方案1】:

您对标签位置的计算有误。您只需在 0,0 位置添加一个标签,由于SpriteKit's coordinate system 规则,它将居中(0,0 位于节点的中心)。

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)

    

你会得到这个:

【讨论】:

谢谢,我稍微修改了你的代码以适应我的应用程序,它现在可以工作了!再次感谢

以上是关于将 SKLabelNode 设置为 SKSpriteNode Swift 的中心的主要内容,如果未能解决你的问题,请参考以下文章

将 SKLabelNode 隐藏属性设置为 NO 不起作用

如何设置 SKLabelNode 的字体大小以适应固定大小(Swift)

将 SKLabelNode 添加到场景工具包视图

SpriteKit:有没有办法根据其基线将 SKLabelNode 居中

如何在 Sprite 工具包中创建方形 SKLabelNode

SCNMaterial 内容中的 SKScene 出现倒置