[编辑:现在解决!好吧,这很尴尬,原来这只是模拟器的一个错误。它在设备上绝对正常。对我的未来来说是一个很好的教训!如果其他人有任何用处,我将在此留出这个问题]
我有两个想要用标准alpha混合覆盖的精灵。但是,“前”子画面本身是从使用减法混合的节点树的快照纹理派生的。我不希望这会有所作为-即将推出的SKTexture展平了,不是吗?因此,只要用于创建使用普通alpha混合的前部精灵,我就不会遇到问题。除非它的表现很奇怪。以下代码说明了这一点(这是我的代码的简化版本)。假定代码在SKScene类中
override func didMove(to view: SKView) {
backgroundColor = .black
let masterNode = SKNode()
let bground = SKShapeNode(circleOfRadius: 100)
bground.fillColor = .red
bground.position.x = -75
bground.zPosition = -1
bground.blendMode = .alpha
masterNode.addChild(bground)
let temp1 = SKShapeNode(circleOfRadius: 100)
temp1.fillColor = .lightGray
let temp2 = SKShapeNode(circleOfRadius: 50)
temp2.fillColor = .red
temp2.blendMode = .subtract
temp2.zPosition = 1
temp1.addChild(temp2)
let fground = SKSpriteNode(texture: SKView().texture(from: temp1))
fground.blendMode = .alpha
fground.zPosition = 5
masterNode.addChild(fground)
addChild(masterNode)
masterNode.position.x = UIScreen.main.bounds.width/2
masterNode.position.y = UIScreen.main.bounds.height/2
}
我意识到这些行中的某些行是不必要的,只是为了清楚地说明所应用的blendMode。
我期待一个完全不与背景混合的青色孔,因为青色孔的alpha值应为1.0。
因此,我并不认为背景形状会“显示”孔,但确实如此。
这是我得到的结果:
Red circle beneath grey circle with subtracted hole
此外,我绝对不希望将底色形状与孔相加-甚至不显示正常的alpha混合。
谁能帮助我了解发生了什么事?
马特