在使用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)
结果:
发布于 2016-05-07 20:54:01
仅当alpha在<.5 (禁用)和>=.5(启用)之间变化时,裁剪节点才会打开和关闭像素
但是,要应用淡入淡出,如果alpha蒙版只是黑色(具有各种alpha级别)和透明,则将蒙版作为常规纹理应用于裁剪节点,并让alpha混合处理淡入淡出效果。
至于你的代码问题,你确定你的裁剪节点是裁剪的,而不仅仅是渲染纹理吗?我不知道纹理看起来是什么样子来尝试和再现这一点。
提供给裁剪节点的节点不能是另一个节点的子节点;但是,它可以有自己的子节点。
当渲染裁剪节点的内容时,裁剪节点首先将其掩码绘制到私有缓冲区中。然后,它渲染子对象。渲染其子对象时,将对照遮罩中的相应像素验证每个像素。如果遮罩中的像素的alpha值小于0.05,则图像像素将被遮罩。任何未由遮罩节点渲染的像素都会自动遮罩。https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKCropNode_Ref/#//apple_ref/occ/instp/SKCropNode/maskNode
https://stackoverflow.com/questions/37088465
复制相似问题