我在场景中遇到了巨大的FPS下降问题,其中有一些静态
动态节点被发射穿过场景并最终停止,具体取决于物理规则。每个动态节点都与其他动态节点以及先前提到的静态节点发生碰撞。
游戏以60fps流畅运行,直到屏幕上的动态节点数量达到约30个或更多。此后,FPS急剧下降至约10fps。
注意1:该问题仅存在于iOS 9上,而非iOS 10(由于不支持iOS 8,因此我没有进行测试)。
注意2:绘制调用不会因动态节点数量增加而增加,因此OpenGL方面似乎没有问题。
注意3:我禁用了
SKSpriteNode
节点,它们具有使用SKPhysicsBody init(polygonFrom: CGPath)
定义的物体,还有一些简单的动态SKSpriteNode
节点,其物体是用init(rectangleOf: CGSize)
定义的。动态节点被发射穿过场景并最终停止,具体取决于物理规则。每个动态节点都与其他动态节点以及先前提到的静态节点发生碰撞。
游戏以60fps流畅运行,直到屏幕上的动态节点数量达到约30个或更多。此后,FPS急剧下降至约10fps。
注意1:该问题仅存在于iOS 9上,而非iOS 10(由于不支持iOS 8,因此我没有进行测试)。
注意2:绘制调用不会因动态节点数量增加而增加,因此OpenGL方面似乎没有问题。
注意3:我禁用了
contactTestBitMask
以确保这不是问题的原因。
我使用Instruments进行了时间分析器,并关注了FPS下降的部分,发现了以下奇怪的事情:
有趣的是,问题段落中超过50%的时间都花在了PhysicsKit
上。请注意,无论碰撞是否发生或动态节点是否静止不动,结果始终如一。这必须是问题的原因,但由于所有这些都发生在系统库(PhysicsKit
)中,我真的不知道在我的代码库中寻找问题的位置。感谢任何帮助!