我正在使用以下设置尝试SpriteKit:
现在问题就在这里,只要前台没有任何CIFilter或者有shouldEnableEffects = NO,一切都很好。也就是说,我可以点击屏幕,我的游戏元素被实例化并添加到主场景中。但是当我尝试将CIGaussianBlur或CIBloom添加到前台时,我注意到两件事:
效果似乎是不断裁剪其内容或调整 这是框架。也就是说,如果我有一个节点,那就是“全屏”效果 似乎试图不断裁剪或调整其界限到最小 保持所有节点所需的区域。这适用于一个节点:
这适用于2个节点:
在OpenGL ES 2中,人们可以通过将整个帧缓冲区(所有对象)渲染到纹理,然后在该纹理上再进行至少一次模糊等操作来进行模糊/布局,然后将其呈现在framebuffer附加到显示器或组成与原始渲染回到帧缓冲区。我希望SKEffectNode以类似的方式工作。然而,裁剪和糟糕的表现让我觉得我可能以错误的方式使用效果节点。有什么想法吗?
答案 0 :(得分:2)
据我所知,SKEffectNode尝试对子SKShapeNodes应用过滤器似乎是一个错误。我玩了这个并取得了你的成果,但是当我为SKSpriteNodes换出SKShapeNodes(使用一个简单的圆圈)时,不再出现裁剪。这是一个错误,因为SKEffectNode不能很好地处理SKShapeNode的笔划。如果你取下笔划(lineWidth = 0)并给它一个填充颜色,你会发现没有裁剪。
对于帧速率,SKShapeNodes表现不佳。切换到SKSpriteNodes我之前提到过,当我在屏幕上有35个节点(iPhone 5)并且应用了过滤器时,我的fps从40增加到50。