我一直在使用 iOS11 / Swift4 下的 PhysicsWorld(一个基本的粒子系统)运行一个简单的多体(800)2x2 像素 SpriteKit 模拟。
它包含一个简单的径向重力节点,有 800 个物体围绕它运行,没有使用碰撞或接触检测。
在我的测试硬件上,iPhone6S——60FPS 和超级流畅的模拟给我留下了深刻的印象——这为更多探索开辟了道路。
我遇到的唯一问题是性能确实不一致。
如果我将重力节点的场强切换到运行中的高值(意味着对象移动得更快) - 在大约 25% 的运行中,模拟可以得到 60FPS 没有问题,但在 4 次运行中的其他 3 次运行中,帧率下降到 3-4FPS
如果我恢复到低场强(较慢的运动),那么它总是再次获得 60FPS。
我在 XCode 中进行了分析 - 并且可以看到有时为应用程序提供了 3 或 4 个线程,提供 60FPS,但其他时候只为任务提供了一个线程 - 这意味着性能不佳
我已经尝试过 Grand Central Dispatch 和线程优先级 - 无济于事 - 无论如何,运行每一帧的唯一代码是 PhysicsWorld,我没有逐帧做任何事情。
有什么想法可以让我获得一致的 60FPS - 显然硬件能够做到 - 但就在感觉像它的时候!
附加说明:如果设备插入开发 Mac/充电/USB/运行 XCode 等 - 使用所有线程时性能通常更好。但是尝试完全相同的应用程序,比如说第二天,在设备上独立运行(不连接到开发机器)——几乎总是性能很差——主要问题!