如何在SpriteKit中应用全屏SKEffectNode进行后期处理

时间:2013-09-21 20:48:26

标签: ios ios7 sprite-kit core-image skeffectnode

我正在使用以下设置尝试SpriteKit:

  1. 带有两个子节点的SKScene仅用于分组其他节点 节点:前景和背景。
  2. 截至目前,背景确实是空的,但最终会持有一些 背景精灵/图层的类型。
  3. 前景是一个SKEffectNode,每当用户点击它时 screen,代表游戏的SKnode子类的新内容 元素作为子元素添加到它。
  4. 这个SKNode子类基本上创建了3个SKShapeNodes和两个标签:outter 圆周,内圆周,2个标签和内圆周。内部四分之一圆周具有SKAction 使它永远围绕其原点/中心旋转。
  5. 现在问题就在这里,只要前台没有任何CIFilter或者有shouldEnableEffects = NO,一切都很好。也就是说,我可以点击屏幕,我的游戏元素被实例化并添加到主场景中。但是当我尝试将CIGaussianBlur或CIBloom添加到前台时,我注意到两件事:

    1. 帧率降至约2fps。请注意,即使这样也会发生 在场景中只剩下6个节点。
    2. 效果似乎是不断裁剪其内容或调整 这是框架。也就是说,如果我有一个节点,那就是“全屏”效果 似乎试图不断裁剪或调整其界限到最小 保持所有节点所需的区域。这适用于一个节点:

      enter image description here

    3. 这适用于2个节点:

      enter image description here

      在OpenGL ES 2中,人们可以通过将整个帧缓冲区(所有对象)渲染到纹理,然后在该纹理上再进行至少一次模糊等操作来进行模糊/布局,然后将其呈现在framebuffer附加到显示器或组成与原始渲染回到帧缓冲区。我希望SKEffectNode以类似的方式工作。然而,裁剪和糟糕的表现让我觉得我可能以错误的方式使用效果节点。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

据我所知,SKEffectNode尝试对子SKShapeNodes应用过滤器似乎是一个错误。我玩了这个并取得了你的成果,但是当我为SKSpriteNodes换出SKShapeNodes(使用一个简单的圆圈)时,不再出现裁剪。这是一个错误,因为SKEffectNode不能很好地处理SKShapeNode的笔划。如果你取下笔划(lineWidth = 0)并给它一个填充颜色,你会发现没有裁剪。

对于帧速率,SKShapeNodes表现不佳。切换到SKSpriteNodes我之前提到过,当我在屏幕上有35个节点(iPhone 5)并且应用了过滤器时,我的fps从40增加到50。