绘制次数异常增加

draw count increasing abnormally

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

大多数时候,游戏是 运行 60fps,平局计数(由 SKView::showsDrawCount 属性 获得)为 8 或 10。 但是有时候,仅仅在B屏上,抽奖次数就会异常增加到70-80抽奖!

这里有一些事实:

有没有人遇到过问题,可以做哪些优化?

我怎样才能获得有关这些抽奖的更多信息,看看它们来自哪里?

谢谢

编辑:

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

好的,我找到了!

我使用一些 SKEffectNodes 作为节点树的根,这些节点树从不改变,属性 shouldRasterize = YES(为了缓存目的,我在网上看到了这个提示但我不记得在哪里。但现在我想知道这是否真的被挪用了......你怎么看?)。

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

If the value of this property is YES, the effect node applies the filter and blends the results. If the value is NO, the effect node is ignored and its children are rendered normally. The default value is NO.

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

我认为疯狂的线程正在处理一些混合效果,因为在将每个 SKEffectNode::shouldEnableEffects 设置为 NO 之后,线程再也没有回来。但是我还是不明白为什么bug只出现在B屏