【问题标题】:SKCropNode masking edge anti-aliasingSKCropNode 掩蔽边缘抗锯齿
【发布时间】:2014-01-04 08:13:56
【问题描述】:

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

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

【问题讨论】:

  • 能分享一下你用来实现掩码的代码吗?
  • 是仅在模拟器上还是在设备上出现像素化??
  • 根据规范,它肯定会有锯齿状边缘,因为 SKCropNode 使用布尔(0 或 1)alpha 值,而不是字节值(例如,0 到 255)。

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


【解决方案1】:

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

【讨论】:

  • 那不是我看到的我的男人。 2018 年 10 月。也许您可以对此进行扩展?
【解决方案2】:

如果你想用抗锯齿效果屏蔽任何 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];

【讨论】:

    【解决方案3】:

    来自官方文档:

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

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

    How to Mask an UIImageView

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      相关资源
      最近更新 更多