在Spritekit中减去blendmode会产生意外结果

时间:2019-01-02 21:46:10

标签: sprite-kit subtraction blend-mode

[编辑:现在解决!好吧,这很尴尬,原来这只是模拟器的一个错误。它在设备上绝对正常。对我的未来来说是一个很好的教训!如果其他人有任何用处,我将在此留出这个问题]

我有两个想要用标准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混合。

谁能帮助我了解发生了什么事?

马特

0 个答案:

没有答案