Spritekit:有效地创建许多SpriteNodes

时间:2015-03-18 10:45:52

标签: performance sprite-kit allocation skspritenode

我正在使用SpriteKit编写一个子弹地狱风格的射击游戏,SK框架似乎能够以60fps处理数百个节点而没有任何问题。然而,我的问题是,有时候我需要在一个帧中产生50多个节点,这似乎确实导致了帧速率的奇怪故障。我应该使用哪些技巧来确保创建许多节点尽可能高效?

我正在重复使用SKTextures,我是否还应该持续收集SKSpriteNodes和SKActions,以便回收'而不是创建新的?

2 个答案:

答案 0 :(得分:1)

要记住几点:

  1. 从父级删除不再需要的任何节点。
  2. 除非绝对必须,否则不要使用usesPreciseCollisionDetection。
  3. 使用纹理图集。
  4. 不要过多地注意节点数量。保持现实,只使用最低要求。

答案 1 :(得分:1)

您可以在游戏场景加载之前预先创建所有节点(使用完成处理程序),并在需要时显示它们,即setHidden = NO。这样您就不必一次又一次地重新创建节点。当不需要节点时,只需将它们隐藏起来即可。您可以阅读更多here。只是找到激光器的一部分。我认为这将是解决由于同时产生许多节点而导致的帧率下降的一种方法。我希望你使用地图集......为了确保一切正常,你可以在视图控制器中查看绘图和节点计数信息并检查统计数据。如果您没有使用地图集,或者错误地使用它们,那么绘制计数可能会很高(与节点计数相比)。

关于docs

的地图集
  

创建纹理图集时,需要在两者之间取得平衡   收集太多纹理或太少。如果使用的图像太少,   Sprite Kit可能仍需要很多绘图过程才能渲染帧。如果   你包含太多的图像,然后可能会有大量的纹理数据   需要立即加载到内存中。因为Xcode构建了   atlases for you,您可以在不同的图集配置之间切换   相对容易。所以试验不同的配置   你的纹理地图集,并选择给你的组合   最佳表现。