我正在测试背景对象的执行情况,这个数组只有几十个SKSpriteNodes
从屏幕底部向上移动,并在超越屏幕顶部后被删除。它们也在正弦波上水平移动。我将backNodeArray
中的节点及其当前水平速度存储在backHorSpeedArray: [Float]
。
在屏幕上显示第一个节点时,iPhone 4S上的CPU利用率达到100%,并且当任何给定时刻该数量在大约25个节点处或多或少稳定时,FPS已经低于35。
我已经使用Time Profiler检查了生猪,发现单行代码占执行时间的55%以上。
override func update(currentTime: CFTimeInterval) {
else if (state == 1) {
if (self.backNodeArray.count > 0) {
for i in 0...self.backNodeArray.count-1 {
self.backHorSpeedArray[i]++;
}
}
}
}
基本上,每次调用更新函数时,self.backHorSpeedArray
中的每个项都会递增,这需要超过执行时间的一半!?
当该行被注释掉时,CPU永远不会达到100%且FPS为60而没有振荡。
这里发生了什么?我可以有一个变量记忆自游戏开始以来的步数,然后添加“只读”#39;数组中的值是否需要它可以解决性能问题,但为什么这会占用CPU密集型呢?