使用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)
有人能看到导致这种行为的原因,或者是否有更好的方法来达到我想要的效果?
面膜:
结果:
如果删除:
let randomCropNode = SKCropNode()
display.addChild(randomCropNode)
结果:
答案 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