gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 04:44:10 27 4
gpt4 key购买 nike

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

  1. 具有两个子节点的 SKScene 仅用于对其他节点进行分组节点:前景和背景。
  2. 背景目前确实是空的,但最终会容纳一些背景 Sprite /层的类型。
  3. 前景是一个 SKEffectNode,每当用户点击screen,代表游戏的 SKnode 子类的新实例元素作为子元素添加到其中。
  4. 这个 SKNode 子类基本上创建了 3 个 SKShapeNodes 和两个标签:一个 outter周长、一个内周长、2 个标签和一个内四分之一周长。内部四分之一圆周有一个 SKAction使其围绕原点/中心永远旋转。

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

  1. 帧速率下降到大约 2fps。请注意,即使场景中只有 6 个节点处于事件状态。
  2. 效果似乎在不断裁剪其内容或调整它的框架。也就是说,如果我有一个节点,“全屏”效果似乎尝试不断裁剪或将其边界调整到最小容纳所有节点所需的区域。这是一个节点:

    enter image description here

这是针对 2 个节点的:

enter image description here

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

最佳答案

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

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

关于ios - 如何在SpriteKit中应用全屏SKEffectNode进行后处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18937461/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com