比如说我创建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
感谢。
答案 0 :(得分:3)
对于SpriteKit blendModes来说,这是正确的和预期的行为,主要是因为他们没有类似的混合模式,忽略了与自身相同的任何东西。
当您减少几个节点的不透明度时,仍会按顺序绘制,因为您可以在任何混合位置下获得累积结果。这就是为什么中间明亮的部分。
在我对你上一个问题的回答中,我通过“扁平化”来避免累积渲染。交叉的两个轴进入一个纹理,然后将该纹理加载为SpriteNode,一次性渲染对象没有交叉,因为它只是一件事。
你想要避免这种累积,连续渲染效果低于完全不透明度的任何东西都要求你先“平坦化”#34;它具有100%不透明度的所有对象/线条/形状,首先应用不透明度变化以获得alpha效果。
这就是为什么我说,在第一个答案中,它并不是解决你的更大问题的唯一办法,只是一种获得理想结果的方法。
如果没有类似的忽略渲染模式,SpriteKit就无法进行叠加,而不会对任何不完全不透明度的东西产生累积影响。