线程分配不一致iOS11 / Spritekit / Physicsbody意味着低FPS

时间:2017-10-10 17:16:23

标签: ios multithreading sprite-kit skphysicsbody skphysicsworld

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

1 个答案:

答案 0 :(得分:0)

当使用物理实体时,有关节点的性能问题很常见,如果您使用了物理实体,则使用标准化实体而不是自定义实体。希望这会有所帮助。