我目前正在开发一款Sprite Kit游戏,该游戏可在两个主屏幕A和A之间滚动。 B. A的位置是(0,0),B位置是(0,device_height)。
大多数情况下,游戏运行速度为60fps,并且在8或10时抽取计数(获得SKView::showsDrawCount
属性)。
但有时候,只有在B屏幕上,抽奖次数会异常增加到70-80抽奖!
这里有一些事实:
SKView::showsNodeCount
给出),但我的真实节点数(通过递归使用[node::children count]
找到)是稳定的。是否有人遇到过问题,可以做些什么优化?
如何获得有关这些抽奖的更多信息,以了解它们来自哪里?
由于
编辑:
刚发现一些非常有趣的东西。这是处理器在一段时间内的使用情况,在屏幕A和B之间切换。我们可以看到某个Thread-14在做很多事情!
答案 0 :(得分:0)
好的,我找到了它!
我正在使用一些SKEffectNode
作为永不改变的节点树的根,使用属性shouldRasterize = YES
(出于缓存目的,我在网上看到了这个提示,但我记不住了但是现在我想知道这是否真的被占用了......你觉得怎么样?)。
我注意到这些节点的shouldEnableEffects
属性在init之后都设置为YES,尽管Apple文档中有描述:
如果此属性的值为YES,则效果节点应用 过滤并混合结果。如果值为NO,则效果节点为 被忽略,其子项正常呈现。默认值为 NO。
显然Apple doc至少在iOS8上的默认值是错误的。
我认为疯狂的线程正在处理一些混合效果,因为在将每个SKEffectNode::shouldEnableEffects
设置为NO后,线程永远不会回来。但是,我仍然不明白为什么这个错误只发生在屏幕B上。