我有一个我想要部分掩盖的图像(wallSprite),一个用作遮罩的图像(wallMaskBox),以及一个用于保存两者的图像(wallCropNode)。当我只是将两个图像作为wallCropNode的子项添加时,两个图像都正确显示:
var wallSprite = SKSpriteNode(imageNamed: "wall.png")
var wallCropNode = SKCropNode()
var wallMaskBox = SKSpriteNode(imageNamed: "blacksquaretiny.png")
wallMaskBox.zPosition = 100
wallCropNode.addChild(wallSprite)
wallCropNode.addChild(wallMaskBox)
gameplayContainerNode.addChild(wallCropNode)
但是当我将遮罩图像设置为裁剪节点的maskNode
属性时:
var wallSprite = SKSpriteNode(imageNamed: "wall.png")
var wallCropNode = SKCropNode()
var wallMaskBox = SKSpriteNode(imageNamed: "blacksquaretiny.png")
wallMaskBox.zPosition = 100
wallCropNode.addChild(wallSprite)
wallCropNode.maskNode = wallMaskBox
gameplayContainerNode.addChild(wallCropNode)
wallSprite图像完全消失,而不是部分裁剪。有什么想法吗?
答案 0 :(得分:2)
问题是你的黑色方形图像是完全不透明的。其一些(或全部)像素应该是透明的(即,α= 0)。对应于掩模节点的透明像素的像素将在裁剪的节点中被遮蔽(即,不渲染)。为了证明这一点,我使用您的代码创建了以下内容。
这是原始图片:
这是我用于maskNode
的蒙版图像。注意,白色区域是透明的(即,α= 0)。来自Apple的文档,
渲染子像素时,每个像素都会被验证 掩码中的相应像素。如果掩码中的像素具有alpha 当值小于0.05时,图像像素被掩盖掉。任何像素都没有 由掩码节点呈现的内容会自动被屏蔽掉。
这是裁剪的节点。我从iPhone 6模拟器中截取了场景的截图。