Swift 4 SpriteKit:如何防止父节点的 .alpha 属性影响子节点?

Posted

技术标签:

【中文标题】Swift 4 SpriteKit:如何防止父节点的 .alpha 属性影响子节点?【英文标题】:Swift 4 SpriteKit: How to prevent the .alpha property of a parent node from effecting the children nodes? 【发布时间】:2018-05-06 02:15:17 【问题描述】:

我有一个 SKSpriteNode,它是 SKLabelNode 的父节点。当我更改 SKSpriteNode 的 .alpha 属性时,它也会更改 SKLabelNode 的 .alpha 属性。这不是我想要实现的行为,我希望 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

【问题讨论】:

【参考方案1】:

不要直接在 TheLabel 上设置 alpha。取而代之的是,使用下面的代码行将透明度应用于 TheLabel 而不会影响其子视图。您需要更改 1 行代码。

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

这将解决您的问题。并且也去掉这行代码

TheLabel.alpha = 0.5

【讨论】:

【参考方案2】:

我以前从未使用过 SpriteKit,但你可以试试:

• 用self.addChild(TheText) 代替TheLabel.addChild(TheText)

• 然后尝试将文本锚定在标签的正上方

【讨论】:

谢谢,这绝对是一个好方法,而且肯定有效,但是因为我计划在游戏中添加多个标签,Imrul 的答案效果更好,并且需要更少的代码。

以上是关于Swift 4 SpriteKit:如何防止父节点的 .alpha 属性影响子节点?的主要内容,如果未能解决你的问题,请参考以下文章

Swift SpriteKit:翻转父精灵随机子节点水平对齐

Swift SpriteKit - “尝试添加一个已经有父节点的 SKNode”,同时添加关节

Swift 4:防止UIView的子视图移动到它的父节点之外

如何在 SpriteKit 中创建图像节点?斯威夫特 4

SpriteKit + Swift - 如何通过缓动移动节点?

如何在 SpriteKit 中一次引用多个 SKNode?