SKCropNode屏蔽边缘抗锯齿

时间:2013-12-16 19:35:38

标签: objective-c sprite-kit antialiasing masking skcropnode

我创建了一个圆形蒙版,并使用精灵工具包SKCropNode类为蒙版内的精灵设置动画。但是掩模的边缘看起来像素化了。

有没有办法使用抗锯齿来平滑边缘?

3 个答案:

答案 0 :(得分:5)

如果要屏蔽任何具有抗锯齿效果的SKNode / SKSpriteNode,则可以使用SKEffectNode而不是SKCropNode。它也适用于动画节点。这是一个例子:

// Set up your node
SKNode *nodeToMask = [SKNode node];
// ...

// Set up the mask node
SKEffectNode *maskNode = [SKEffectNode node];

// Create a filter
CIImage *maskImage = [[CIImage alloc] initWithCGImage:[UIImage imageNamed:@"your_mask_image"].CGImage];
CIFilter *maskFilter = [CIFilter filterWithName:@"CISourceInCompositing"
                                  keysAndValues:@"inputBackgroundImage", maskImage, nil];
// Set the filter
maskNode.filter = maskFilter;

// Add childs
[maskNode addChild:nodeToMask];
[scene addChild:maskNode];

答案 1 :(得分:3)

来自官方文档:

  

如果掩码中的像素的alpha值小于0.05,则   图像像素被掩盖了。

因此,SKCropNode不支持每像素alpha值。它要么绘制像素,要么不绘制像素。如果alpha(由抗锯齿使用)对您很重要,您应该考虑替代路线。例如:

How to Mask an UIImageView

答案 2 :(得分:-1)

截至目前(2018年6月),我可以确认SKCropNode将进行每像素alpha混合。如果裁剪节点具有SKSpriteNode作为蒙版,并且蒙版节点使用具有消除锯齿蒙版图像的纹理,裁剪节点将执行正确的混合。