【发布时间】:2016-10-24 22:14:03
【问题描述】:
我在场景中遇到了巨大的 FPS 下降,其中一些静态 SKSpriteNode 节点的主体用SKPhysicsBody init(polygonFrom: CGPath) 定义,一些简单的动态SKSpriteNode 节点的主体用init(rectangleOf: CGSize) 定义。
动态节点在场景中被触发并最终休息,这取决于物理。每个动态节点都与其他动态节点以及前面提到的静态节点发生冲突。
游戏以 60fps 流畅运行,直到屏幕上的动态节点数量约为 30 或更多。之后,FPS 开始急剧下降到 10fps 左右。
注意 1:该问题在 iOS 10 上不存在,只有 iOS 9(我没有测试过 iOS 8,因为我不支持它)。
注意2:由于动态节点的增加,draw call并没有增加,所以在OpenGL端似乎没有问题。
注意 3:我禁用了 contactTestBitMask 以确保这不是问题的原因。
我用 Time Profiler 运行 Instruments,专注于 FPS 下降的部分,发现以下奇怪的事情:
奇怪的是,有问题的片段中超过 50% 的时间都花在了PhysicsKit。请注意,此时是否正在发生碰撞或动态节点是否只是静止不动并不重要。结果总是一样的。
这一定是它的原因,但由于所有这些都发生在系统库 (PhysicsKit) 中,我真的不知道在我的代码库中哪里寻找问题。
感谢您的帮助!
【问题讨论】:
-
您尝试清理项目了吗? Shift-CMD-K
-
SpriteKit 版本之间一直存在非常奇怪的不一致。即使在次要版本之间。 Apple 从不发布更改或其他有用的发行说明。他们很少在自己的论坛上回复关于性能问题的长线程。我告诉你这个,所以你不认为这是一个完全的反常现象。有报告称最新的 SpriteKit 中存在内存错误和音频问题,这些问题本应被基本单元测试发现,并且自 iOS 10 早期测试版以来就已成为其一部分。 Sprite Kit 的用户并不多,Apple 也没有给予太多的关心或关注。
-
@Nik 是的,很多次。
-
如果你想有办法将 Box2D 导入 SpriteKit。
-
@NSDawg 不确定我是否想这样做。
标签: ios sprite-kit game-physics skphysicsbody