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

let image = SKSpriteNode(imageNamed: "background")
let mask = SKSpriteNode(imageNamed: "mask")
let fadeMask = SKCropNode()
fadeMask.maskNode = mask
fadeMask.addChild(image)
addChild(fadeMask)但这张照片一点也不被掩盖。难道面具的形象不适合做面具吗?不能像面具那样做渐变?
发布于 2022-09-03 16:07:43
裁剪节点根据掩码是alpha还是不透明绘制像素。这种逻辑是硬边的,即不是连续的混合梯度.
根据苹果:“如果掩码中的像素的α值小于0.05,图像像素就会被遮住。”
然而,你可以通过其他方式达到你想要的效果。例如,这里有一个使用着色器的例子。诚然,这件事更麻烦,但它有效。
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)
}
}https://stackoverflow.com/questions/73411838
复制相似问题