抽奖计数异常增加

时间:2015-02-11 09:04:32

标签: ios optimization sprite-kit

我目前正在开发一款Sprite Kit游戏,该游戏可在两个主屏幕A和A之间滚动。 B. A的位置是(0,0),B位置是(0,device_height)。

大多数情况下,游戏运行速度为60fps,并且在8或10时抽取计数(获得SKView::showsDrawCount属性)。 但有时候,只有在B屏幕上,抽奖次数会异常增加到70-80抽奖!

这里有一些事实:

  • 当我显示B时,我不会删除屏幕节点,因为A节点会继续影响物理效果。
  • 我使用SKTextureAtlas并在字典中预加载所有纹理以进行优化
  • 即使删除了装饰节点(粒子,背景),也会发生绘图计数增加。
  • 当错误发生时,非剔除的节点数量显着增加(由SKView::showsNodeCount给出),但我的真实节点数(通过递归使用[node::children count]找到)是稳定的。

是否有人遇到过问题,可以做些什么优化?

如何获得有关这些抽奖的更多信息,以了解它们来自哪里?

由于

编辑:

刚发现一些非常有趣的东西。这是处理器在一段时间内的使用情况,在屏幕A和B之间切换。我们可以看到某个Thread-14在做很多事情!

processor over time

1 个答案:

答案 0 :(得分:0)

好的,我找到了它!

我正在使用一些SKEffectNode作为永不改变的节点树的根,使用属性shouldRasterize = YES(出于缓存目的,我在网上看到了这个提示,但我记不住了但是现在我想知道这是否真的被占用了......你觉得怎么样?)。

我注意到这些节点的shouldEnableEffects属性在init之后都设置为YES,尽管Apple文档中有描述:

  

如果此属性的值为YES,则效果节点应用   过滤并混合结果。如果值为NO,则效果节点为   被忽略,其子项正常呈现。默认值为   NO。

显然Apple doc至少在iOS8上的默认值是错误的。

我认为疯狂的线程正在处理一些混合效果,因为在将每个SKEffectNode::shouldEnableEffects设置为NO后,线程永远不会回来。但是,我仍然不明白为什么这个错误只发生在屏幕B上。