【问题标题】:How do you add a CIPixellate Core Image Filter to a Sprite Kit scene?如何将 CIPixellate Core Image Filter 添加到 Sprite Kit 场景中?
【发布时间】:2014-08-30 20:03:25
【问题描述】:

如何将 CIPixellate Core Image Filter 添加到 Sprite Kit 场景中?

我有一个 SpriteKit 场景,它是 SKScene 或其子类。 我想在场景中添加一个核心图像过滤器。特别是 CIPixellate 过滤器,这样我就可以免费拥有 8 位游戏天堂。

我该怎么做?

【问题讨论】:

    标签: sprite-kit core-image cifilter skscene cipixellate


    【解决方案1】:

    事实证明这并不难。只是 Core Image Filter 文档过时且粗鲁,在 SpriteKit 的情况下,文档完全具有误导性或不完整,包括 SKEffectNode强>文档。 SKEffectNode 文档对 SKEffectNodefilter 属性有这样的说法(截至本文):

    Core Image 过滤器必须有一个 inputImage 参数并产生一个 outputImage 参数。默认值为无。如果 值为 nil 且效果节点已启用,无需过滤 地方。但是,它的孩子仍然在一个单独的通道中渲染,并且 混合到父级的帧缓冲区。

    嗯,这有点信息量,但信息量不是很大,因为核心图像过滤器目录说 CIPixellate 具有以下参数键: 输入图像 输入中心 输入刻度 它没有说明 outputImage 或 inputScale 的“像素化程度如何”。

    嗯,就是这样......让我们看看如何。

    首先,请注意 SKScene 继承自 SKEffectNode。 这意味着您可以向其中添加 CIFilters。太棒了。

    你需要做的就是这个。

    首先创建一个 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];
    

    请注意,您可以在将其添加到父节点之前或之后以及在屏幕上之前或之后添加它。您甚至可以构建自定义 SKAction 来执行此操作... :)

    从所有这些中,您可以注意到的一件事是 Core Image Filter 目录,尽管它很古老,但确实告诉您各种过滤器是各种 CICategory 类型的成员,即使这些过滤器的文档也很差。但是您基本上可以假设在给定类别中有效的任何东西都意味着该类别中的其他过滤器也可能有效:)

    【讨论】:

    • 我无法在 SpriteKit、Swift 和 iOS 8 中使用。如果我在didMoveToView() 中添加效果,结果只是背景变黑,并且节点的移动给背景留下痕迹。是否可以分享SKScene类扩展的完整代码?
    • 子类化而不是类扩展。但我在 OSX 上做了这个,不确定这是否是 iOS 上的正确位置。
    • 是 *子类化(错字)。我想关键是这也适用于 iOS。在这里查看我的问题:stackoverflow.com/questions/26072230/…
    • 希望这些帖子可以一起澄清。 SpriteKit 的一大优点是它可以很好地用于两个平台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多