1

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

经过大量研究,我得出的结论是图像像素的 alpha 值不会适应蒙版,但是在继续我的项目后,我注意到一个特定的cropNode 图像的像素实际上正在褪色到蒙版像素阿尔法值???太棒了!但是,在复制了这个之后,我不知道它为什么会这样做?

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)

任何人都可以看到是什么导致了这种行为,或者是否有更好的方法来获得我想要的效果?

面具:

在此处输入图像描述

结果:

在此处输入图像描述

如果删除:

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

结果:

在此处输入图像描述

4

1 回答 1

1

如果 alpha 在 <.5 (off) 和 >=.5(on) 之间变化,裁剪节点只会打开和关闭像素

但是,要应用淡入淡出,如果您的 alpha 蒙版只是黑色(具有各种 alpha 级别)且透明,您可以将蒙版作为常规纹理应用到您的裁剪节点,并让 alpha 混合处理淡入淡出效果。

至于您的代码问题,您确定您的裁剪节点正在裁剪,而不仅仅是渲染纹理?我不知道尝试复制它的纹理是什么样的。

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

当裁剪节点的内容被渲染时,裁剪节点首先将它的掩码绘制到一个私有缓冲区中。然后,它渲染它的孩子。在渲染其子级时,每个像素都会根据掩码中的相应像素进行验证。如果遮罩中的像素具有小于 0.05 的 alpha 值,则图像像素被遮盖掉。任何未被遮罩节点渲染的像素都会被自动遮罩。 https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode

于 2016-05-07T12:54:00.850 回答