我使用精灵套件 SKCropNode 类创建了一个圆形遮罩并为遮罩内的精灵设置动画。但是面具的边缘看起来像素化了。
有没有办法使用抗锯齿来平滑边缘?
我使用精灵套件 SKCropNode 类创建了一个圆形遮罩并为遮罩内的精灵设置动画。但是面具的边缘看起来像素化了。
有没有办法使用抗锯齿来平滑边缘?
如果你想用抗锯齿效果屏蔽任何 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];
来自官方文档:
如果遮罩中的像素具有小于 0.05 的 alpha 值,则图像像素被遮盖掉。
因此,SKCropNode 不支持每像素 alpha 值。它要么绘制像素,要么不绘制。如果 alpha(用于抗锯齿)对您很重要,您应该考虑替代路线。例如:
截至目前(2018 年 6 月),我可以确认 SKCropNode 将进行每像素 alpha 混合。如果裁剪节点有一个 SKSpriteNode 作为遮罩,并且遮罩节点使用带有抗锯齿遮罩图像的纹理,裁剪节点将进行适当的混合。