我创建了一个spriteKit游戏并且遇到了性能问题。
问题:
FPS陷入40.0
如何以及何时发生
1.我使用view!.scene?.paused = true
在我的游戏中有一个暂停功能。有时当我点击主页按钮,启动另一个应用程序,然后回到FPS得到的游戏“卡住”。在40,并没有爬回到60.0。 (有时它确实)
我有一个共享' Facebook和Twitter图标,当您点击它时,您可以在您的帐户上发布/分享/推特。暂停菜单中可以看到此图标。在发布或返回游戏后,FPS卡在40 FPS(再次,有时它会爬回到60.有时它没有)
3.澄清一下,这不会发生在游戏中。只有在我提醒弹出窗口期间最小化应用程序,启动Facebook / Twitter图标时才会发生这种情况。
临时修复
有一个临时修复,这是最小化应用程序,然后再次启动它。但是,我不希望我的用户体验这一点。如果可能,我想完全消除这个问题。
到目前为止我已尝试解决此问题
我试过在仪器上运行它(时间分析器),但没有真正引起我注意。以为我不得不说我对乐器很新。
2.有一个类似的问题here,但对他来说,禁用UIKit项目为他修好了,我没有任何一个。
3.我最初认为这是SKShapeNode
问题所以我将精灵改为SKSpriteNode
。这里也没有帮助。
4.我试过没有连接到手机的USB线,并尝试使用XCode上的运行按钮运行它。没有区别。
我试过重启设备和笔记本电脑。没有帮助。
6.在多个设备上试过这个。同样的问题。
统计吗
游戏通常从20个节点和5个绘制开始,最多可以进行60个节点6次绘制,但只要我不启动上述任何触发方法,它实际上仍然会运行平稳。
我花了很多时间试图找到解决方案。更改代码并简化它。谷歌搜索它。我真的需要帮助。我真的很感激一些帮助。
评论#1的更新
第一次询问你
1)我在游戏过程中有一个SKSpriteNode
作为暂停按钮,用户可以根据需要暂停游戏。
2)我的AppDelegate.swift文件中有func applicationWillResignActive(application: UIApplication) {}
触发GameScene.swift函数,该函数将标志从true更改为false,以便我知道用户何时退出并再次返回。我让update
块搜索该标志。如果为true,则显示暂停菜单。但是,这个40FPS问题发生在我添加整个暂停/取消暂停之前。 (40 FPS问题是让我为此创建暂停菜单的原因)(我在最新版本的swift中也知道,它会在应用程序最小化时自动暂停,并在我重新启动时取消暂停。)