事实证明这并不难。只是那核心图像过滤器文档是旧的和粗糙的,在这种情况下雪碧套件,这些文档完全具有误导性或不完整,包括SKE效果节点文档。
这SKE效果节点文档有这样的说法(截至本文)filter的财产SKE效果节点:
Core Image 过滤器必须具有单个 inputImage 参数并生成单个 outputImage 参数。默认值为 nil。如果
值为nil且效果节点已启用,不进行任何过滤
地方。然而,它的子项仍然在单独的通道中渲染,并且
混合到父级的帧缓冲区。
好吧,这有点信息性,但信息量不是很大,因为 Core Image Filter 目录说 CIPixellate 有以下参数键:输入图像
输入中心
输入比例它没有说明有关outputImage 或inputScale 的“像素化程度”。
嗯,就是这样……让我们看看如何做。
首先,请注意SKScene继承自SKE效果节点。
这意味着您可以向其中添加 CIFilter。惊人的。
您需要做的就是这个。
首先创建一个CIFilter。
CIFilter *pixellateFilter;
pixellateFilter = [CIFilter filterWithName:@"CIPixellate"];
[pixellateFilter setDefaults]; // Remember to setDefaults...
// We could change some value but for this one we won't.
// [pixellateFilter setValue:@(10.0) forKey:@"inputScale"];
然后配置你的 SKEffectNode 来实际渲染效果!
[aScene setShouldEnableEffects:YES];
将过滤器居中并不是一个坏主意。但您的里程可能会有所不同。
[aScene setShouldCenterFilter:YES];
接下来添加过滤器。
[aScene setFilter:pixellateFilter];
请注意,您可以在将其添加到父节点之前或之后以及在屏幕上之前或之后添加它。您甚至可以构建自定义 SKActions 来执行此操作...:)
从所有这些中,您可以注意到的一件事是,核心图像过滤器目录虽然很古老,但确实告诉您各种过滤器是各种 CICategory 类型的成员,即使这些过滤器的文档也很少。但您基本上可以假设在给定类别中有效的任何内容都意味着该类别中的其他过滤器也可能有效:)