首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当掩码为梯度时,SKCropNode不进行裁剪

当掩码为梯度时,SKCropNode不进行裁剪
EN

Stack Overflow用户
提问于 2022-08-19 04:27:53
回答 1查看 49关注 0票数 0

我试图在SKSpriteNode中添加一个掩码,其中掩码是一个梯度(如附件所示)。

代码语言:javascript
复制
 let image = SKSpriteNode(imageNamed: "background")
 let mask = SKSpriteNode(imageNamed: "mask")

 let fadeMask = SKCropNode() 
 fadeMask.maskNode = mask
        
       
 fadeMask.addChild(image)
        
 addChild(fadeMask)

但这张照片一点也不被掩盖。难道面具的形象不适合做面具吗?不能像面具那样做渐变?

EN

回答 1

Stack Overflow用户

发布于 2022-09-03 16:07:43

裁剪节点根据掩码是alpha还是不透明绘制像素。这种逻辑是硬边的,即不是连续的混合梯度.

根据苹果:“如果掩码中的像素的α值小于0.05,图像像素就会被遮住。”

然而,你可以通过其他方式达到你想要的效果。例如,这里有一个使用着色器的例子。诚然,这件事更麻烦,但它有效。

代码语言:javascript
复制
class GameScene: SKScene {

    let shader_gradient_sourcecode = """
void main() {
    float alpha = 1 - v_tex_coord.x; //set alpha to x value for a horizontal gradient
    gl_FragColor = vec4(1, 1, 1, alpha);
}
"""
    
    override func didMove(to view: SKView) {
        let image = SKSpriteNode(imageNamed: "background")
        let mask = SKShapeNode(rectOf: image.size) //make mask same size as primary image

        //init shader and assign it to the mask
        let shader_gradient = SKShader(source:shader_gradient_sourcecode)
        mask.fillShader = shader_gradient
                
        //init cropNode
        let cropNode = SKCropNode()
        cropNode.maskNode = mask
        cropNode.addChild(image)
        addChild(cropNode)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73411838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档