6

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

  1. 具有两个子节点的 SKScene 仅用于对其他节点进行分组:前景和背景。
  2. 到目前为止,背景确实是空的,但最终会保存某种类型的背景精灵/图层。
  3. foreground 是一个 SKEffectNode,每当用户点击屏幕时,代表游戏元素的 SKnode 子类的新实例将作为子元素添加到其中。
  4. 这个 SKNode 子类基本上创建了 3 个 SKShapeNode 和两个标签:一个外圆周、一个内圆周、2 个标签和一个内四分之一圆周。内四分之一圆周有一个 SKAction,使其永远围绕其原点/中心旋转。

现在问题来了,只要前台没有任何 CIFilter 或 shouldEnableEffects = NO,一切都很好。也就是说,我可以点击屏幕,我的游戏元素被实例化并添加到主场景中。但是,当我尝试将 CIGaussianBlur 或 CIBloom 添加到前景时,我注意到两件事:

  1. 帧率下降到大约 2fps。请注意,即使场景中只有 6 个节点存活,也会发生这种情况。
  2. 效果似乎在不断地裁剪其内容或调整其框架。也就是说,如果我有一个节点,“全屏”效果似乎会尝试不断裁剪或调整其边界到容纳所有节点所需的最小区域。这是一个节点:

    在此处输入图像描述

这是针对 2 个节点的:

在此处输入图像描述

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

4

1 回答 1

3

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

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

于 2013-09-22T01:10:33.857 回答