1

我一直在使用 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 等 - 使用所有线程时性能通常更好。但是尝试完全相同的应用程序,比如说第二天,在设备上独立运行(不连接到开发机器)——几乎总是性能很差——主要问题!

4

1 回答 1

0

使用物理体时,节点的性能问题很常见,如果您使用了物理体,请使用标准化的体而不是自定义的体。希望这可以帮助。

于 2017-11-01T11:06:16.110 回答