SKCropNode奇怪的行为

时间:2016-05-07 12:20:56

标签: swift sprite-kit mask behavior skcropnode

使用SKCropNode时,我希望我添加到cropNode的图像根据相应的蒙版像素alpha值调整每个单独的像素alpha值。

经过大量研究,我得出的结论是图像像素alpha值不会适应掩模,但是在继续我的项目之后,我注意到一个特定的cropNode图像的像素实际上已经消失了掩码像素alpha值???哪个太棒了!但是在复制之后,我不知道它为什么这样做?

import SpriteKit

var textureArray: [SKTexture] = []
var display: SKSpriteNode!

class GameScene: SKScene {
    override func didMoveToView(view: SKView) {

    anchorPoint = CGPointMake(0.5, 0.5)
    backgroundColor = UIColor.greenColor()

    fetchTexures()

    display = SKSpriteNode()

    let image = SKSpriteNode(texture: textureArray[0])
    display.addChild(image)

    let randomCropNode = SKCropNode()
    display.addChild(randomCropNode)

    let cropNode = SKCropNode()
    cropNode.maskNode = display

    let fill = SKSpriteNode(color: UIColor.whiteColor(), size: frame.size)
    cropNode.addChild(fill)

    cropNode.zPosition = 10

    addChild(cropNode)


}

func fetchTexures() {

    var x: Int = 0

    while x < 1 {

        let texture: SKTexture = SKTextureAtlas(named: "texture").textureNamed("\(x)")
        textureArray.append(texture)

        x += 1

        }
    }

} 

上面的代码给了我想要的效果,但是如果你删除下面的图像像素alpha值不再按照掩码调整?下面的代码实际上并没有在我的项目中使用,但这是我可以调整像素alpha值的唯一方法。

let randomCropNode = SKCropNode()
display.addChild(randomCropNode)

有人能看到导致这种行为的原因,或者是否有更好的方法来达到我想要的效果?

面膜:

enter image description here

结果:

enter image description here

如果删除:

let randomCropNode = SKCropNode()
display.addChild(randomCropNode)

结果:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果alpha在&lt; .5(off)和&gt; =。5(on)之间变化,裁剪节点将仅打开和关闭像素

然而,要应用淡入淡出,如果您的Alpha蒙版只是黑色(具有不同的alpha级别)并且是透明的,则将蒙版作为常规纹理应用于裁剪节点,并且让alpha混合处理淡入淡出效果。

至于您的代码问题,您确定您的裁剪节点是裁剪,而不仅仅是渲染纹理?我不知道尝试重现这个纹理是什么样的。

  

提供给crop节点的节点不能是另一个节点的子节点   节点;但是,它可能有自己的孩子。

     

渲染裁剪节点的内容时,裁剪节点首先绘制   它的掩码进入私有缓冲区。然后,它呈现它的孩子。什么时候   渲染它的子节点,每个像素都经过验证   掩码中的相应像素。如果掩码中的像素具有alpha   当值小于0.05时,图像像素被掩盖掉。任何像素都没有   由掩码节点呈现的内容会自动被屏蔽掉。   https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode