13

我使用精灵套件 SKCropNode 类创建了一个圆形遮罩并为遮罩内的精灵设置动画。但是面具的边缘看起来像素化了。

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

4

3 回答 3

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];
于 2015-09-02T09:18:15.090 回答
3

来自官方文档:

如果遮罩中的像素具有小于 0.05 的 alpha 值,则图像像素被遮盖掉。

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

如何屏蔽 UIImageView

于 2013-12-30T13:11:04.070 回答
-1

截至目前(2018 年 6 月),我可以确认 SKCropNode 将进行每像素 alpha 混合。如果裁剪节点有一个 SKSpriteNode 作为遮罩,并且遮罩节点使用带有抗锯齿遮罩图像的纹理,裁剪节点将进行适当的混合。

于 2018-06-05T20:41:44.763 回答