如何对SKSpriteNode进行alpha掩码?

时间:2014-09-19 07:36:05

标签: ios iphone sprite-kit mask skeffectnode

我知道有SKCropNode,但它只会根据maskNode的Alpha阈值完全插入或排除像素。我已经尝试过使用带有SKEffectNode过滤器的CIBlendWithAlphaMask,但我得到的结果是不可见的,我也不确定如何移动蒙版。这是代码:

SKSpriteNode* overlay = [SKSpriteNode spriteNodeWithImageNamed:@"Overlay.png"];
//...
SKEffectNode* blendNode = [[SKEffectNode alloc] init];
blendNode.filter = [CIFilter filterWithName:@"CIBlendWithAlphaMask"];

UIImage* maskImage = [UIImage imageNamed:@"MaskImage.png"];
[blendNode.filter setValue:[maskImage CIImage] forKey:@"inputMaskImage"];

[blendNode addChild:overlay];
[self addChild:blendNode];

我已经找到了完美的解决方案,使用SKLightNode点亮纹理,然后使用SKBlendModeAdd将其混合到帧缓冲区中,但由于某种原因,它无法在iPhone 5上运行( here's a related topic)。我也知道this topic,但也没有帮助。

任何正确使用alpha掩码SKSpriteNode的解决方案都将非常感谢! 运行iOS 8。

1 个答案:

答案 0 :(得分:1)

使用动态生成的CIImage作为掩码可以解决问题。它可以由CIFilter创建,使用您需要的任何渐变或图像作为蒙版,并将inputCenter属性设置为您想要的位置。