Sprite kit 如何在有大量SKShapeNodes的spritekit游戏中增加FPS?

Sprite kit 如何在有大量SKShapeNodes的spritekit游戏中增加FPS?,sprite-kit,skshapenode,Sprite Kit,Skshapenode,我需要一个建议。我正在做一个有很多恶作剧的游戏。所以我的FPS大约是18。有没有人建议如何在这样的游戏中提高FPS?整个游戏场景中的SKShapeNode数量为220。SKShapeNode是相当高的性能密集型,因为SpriteKit是光栅化(计算形状的像素)每一帧,而不是计算一次,而不是重复使用它 我看到的两个选择是: 使用形状节点创建SKTexture(s)对象,然后使用SKSpriteNode显示这些纹理,而不是直接显示SKShapeNode对象 将SKEffectNode的部分/全部S

我需要一个建议。我正在做一个有很多恶作剧的游戏。所以我的FPS大约是18。有没有人建议如何在这样的游戏中提高FPS?整个游戏场景中的SKShapeNode数量为220。

SKShapeNode
是相当高的性能密集型,因为SpriteKit是光栅化(计算形状的像素)每一帧,而不是计算一次,而不是重复使用它

我看到的两个选择是:

  • 使用形状节点创建
    SKTexture
    (s)对象,然后使用
    SKSpriteNode
    显示这些纹理,而不是直接显示
    SKShapeNode
    对象
  • SKEffectNode
    的部分/全部
    SKShapeNode
    对象子对象设置为
    SKEffectNode
    ,并将其
    属性设置为
    true
    ,这意味着它将光栅化
    SKEffectNode
    子对象一次,缓存已渲染的内容并在没有更改的情况下重用它

您应该使用什么取决于您试图实现的目标,这些节点的形状是否随时间而变化?那些形状在移动吗?是所有人都在改变/移动,还是只是其中的一部分?

谢谢,特雷弗·安妮·丹尼斯!我使用这些形状只是为了移动,如果它需要删除,而不是一次又一次地产生新的形状。那么,第一种选择对我来说更好吗?@NurassylNuridin不客气,请记住一件事:缓存只有在形状没有变化时才真正有效,所以缓存没有变化的东西。如果你只想移动一些节点,直接移动缓存它们的节点,这样就只是“移动一个纹理”,而不是重新绘制所有内容。但是顺便说一句,我相信在某些情况下,移动SKEffectNode可能会触发其子节点的“新渲染”。因此,SKTexture可能会更好。我将尝试这两种方法,也许其中一些更好用在我的游戏中)再次感谢!