【问题标题】:Thread assignment inconsistent iOS11 / Spritekit / Physicsbody meaning low FPS线程分配不一致 iOS11 / Spritekit / Physicsbody 意味着低 FPS
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 2011-04-17
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多