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