【问题标题】:Swift 3 (SpriteKit): Changing the alpha value of the parent which affects all childrenSwift 3(SpriteKit):更改影响所有子级的父级的 alpha 值
【发布时间】:2017-05-07 15:36:00
【问题描述】:

例如,我创建SKShapeNode 并为其创建子项(例如,一个十字及其两条相交的线)。十字是父项,相交的线是子项。你怎么能改变所有父母的孩子的阿尔法值? 目前只是使用:

parent.alpha = 0.5

不会更改其子项的 alpha 值。

如果有人能够创建一个可以解决此问题或使用任何其他方式的着色器,请回复。 这个帖子是对我之前帖子的回应:(Swift: Make translucent overlapping lines of the same color not change color when intersecting) 如果有人能够解决此问题,我正在尝试使半透明线相交的较暗点消失。

下面是一些代码作为示例:

let nodeParent = SKShapeNode()
let nodeOne = SKShapeNode(circleOfRadius: 5)
let nodeTwo = SKShapeNode(circleOfRadius: 5)

//Set the color of the circles, I'm not sure if this is the right way 
nodeOne.fillColor = UIColor.init(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0)
nodeTwo.fillColor = UIColor.init(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0)

nodeParent.addChild(nodeOne)
nodeParent.addChild(nodeTwo)
addChild(nodeParent)

nodeParent.alpha = 0.5

我在使用线条而不是圆圈时截取了问题的屏幕截图:

谢谢。

【问题讨论】:

  • 这应该可以。一个有子节点,有子节点,有子节点的父节点……父节点的透明度平等地影响它的所有子节点。如果所有子项的不透明度都为 1.0,并且父项更改为 0.5,那么所有子项将变为 0.5。如果孩子从 0.5 开始生命,而父母在 1.0 开始生活,那么将父母更改为 0.5 会使孩子的不透明度减半为 0.25
  • 我将所有子级添加到父级,其 alpha 为 1.0,并且由于某种原因更改父级的 alpha 不会影响它。这就是我想要弄清楚的。
  • 啊,那肯定是父母和孩子的关系出了问题。你能显示更多代码吗?这真的应该工作。
  • 我编辑了我的帖子。
  • 尝试将 nodeParent 设为 SKNode() 而不是 SKShapeNode()。应该没什么区别,但值得一试。

标签: swift sprite-kit alpha children skshapenode


【解决方案1】:

对于 SpriteKit blendModes,这是正确且预期的行为,主要是因为它们没有类似的混合模式会忽略与自身相同的任何内容。

当您降低几个节点的不透明度时,这些节点仍按顺序绘制,您会在任何混合位置下获得累积结果。这就是为什么中间的明亮部分。

在我对您上一个问题的回答中,我通过将十字的两个轴“展平”到纹理中来避免累积渲染,然后将该纹理加载为 SpriteNode,这是一个没有交点的一次性渲染对象,因为它都是一个东西。

您想要避免这种累积的、顺序渲染效果低于完全不透明度的任何操作都需要您首先将所有对象/线条/形状以 100% 不透明度“展平”,然后将不透明度更改应用到获得 alpha 效果。

这就是为什么我在第一个“答案”中说,这并不是解决您更大问题的真正方法,只是一种获得预期结果的方法。

如果没有类似忽略渲染模式,SpriteKit 无法进行叠加而不会对不完全不透明度的任何内容产生累积影响。

【讨论】:

  • 好的,我只是想对此发表不同的看法,看看是否有人有其他解决方法。看来你是对的。纹理的问题是它们很慢,我每秒创建几次。
  • @J.Treutlein 您正在使用的那些 SKShapeNode 使您的游戏变慢,而不是纹理。 SpriteKit 可以以高效的方式(通过使用图集)渲染大量纹理。 SKShapeNode 不能这样说。它在渲染时需要(至少)一个绘图调用。阅读更多 herehere 如果屏幕上有 50 多个 SKShapeNode,那么您可能会遇到一些严重的性能问题。正如文档中所指出的,应该谨慎使用它。
  • @J.Treutlein 在此处阅读有关批处理渲染的更多信息:stackoverflow.com/q/22851983/3402095(参见 LearnCocos2D 的帖子)。
猜你喜欢
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
相关资源
最近更新 更多