Swift 4 SpriteKit: Как предотвратить влияние свойства .alpha родительского узла на дочерние узлы? - PullRequest
0 голосов
/ 06 мая 2018

У меня есть SKSpriteNode, который является родительским узлом SKLabelNode. Когда я изменяю свойство .alpha в SKSpriteNode, оно также меняет свойство .alpha в SKLabelNode. Это не то поведение, которое я хотел бы реализовать, я хотел бы, чтобы SKSpriteNode имел .alpha 0,5 (который является фоном текста), а затем SKLabelNode, чтобы иметь .alpha 0,9. Кто-нибудь знает, как я мог создать эту функциональность для моей игры?

Вот мой код для метки:

    let TheLabel = SKSpriteNode()
    TheLabel.zPosition = 6
    TheLabel.color = UIColor.black
    TheLabel.anchorPoint = CGPoint(x: 0, y: 0)
    TheLabel.alpha = 0.5

    let TheText = SKLabelNode(fontNamed: "Noteworthy")
    TheText.text = "TheUserNameOfTheOpponent"
    TheText.fontSize = 25
    TheText.fontColor = UIColor.white.withAlphaComponent(0.9)
    TheText.zPosition = 7

    TheLabel.size.width = TheText.frame.size.width * 1.2
    TheLabel.size.height = TheText.frame.size.height * 1.2
    TheLabel.position = CGPoint(x: self.frame.width / 2 - (TheLabel.frame.width / 2), y: self.frame.height - 50)
    TheText.position = CGPoint(x: TheLabel.size.width / 2, y: TheLabel.size.height / 2)
    TheText.horizontalAlignmentMode = .center
    TheText.verticalAlignmentMode = .center

    self.addChild(TheLabel)
    TheLabel.addChild(TheText)

Вот скриншот того, как это выглядит сейчас: CurrentLabel

Вот скриншот того, как я бы хотел, чтобы он выглядел: DesiredLabel

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Не устанавливайте альфа непосредственно на TheLabel . Вместо этого используйте приведенную ниже строку кода, которая применяет прозрачность к TheLabel , не затрагивая его дочерние представления. Вам необходимо изменить 1 строку кода.

TheLabel.color = UIColor.black.withAlphaComponent(0.2)

Это решит вашу проблему. А также удалите эту строку кода

TheLabel.alpha = 0.5
0 голосов
/ 06 мая 2018

Я никогда раньше не работал с SpriteKit , но вы можете попробовать:

• Вместо TheLabel.addChild(TheText) сделать self.addChild(TheText)

• Затем попытайтесь закрепить текст так, чтобы он был прямо над ярлыком

...