sprite-kit - 呈现 UIView 时 Spritekit FPS 下降

标签 sprite-kit uikit frame-rate

我正在完成我的一个项目,一款用 Spritekit 制作的游戏。 我使用 UIKit 创建了一个小菜单(1 个 View 和几个按钮)。 我连接了 SKScene 和 View Controller 类进行通信,因此当游戏完成时,我可以显示菜单。

我注意到 SKScene FPS 存在问题。 我已经在2015年的苹果开发者论坛上找到了一些信息,这个问题是在iOS 9中首次发现的。 当我通过 SKScene 呈现 UIView 时,我的 FPS 从 60 下降到 40。 当我隐藏 UIView 并再次运行游戏后,FPS 又增加了。但是在大约 2-3 秒内,这让我在游戏开始时的动画出现了滞后。 我尝试先预加载所有纹理图集,但没有任何改变。 我认为我的纹理太大,问题出在我的动画中,我将所有图像及其质量从 32 位颜色降低到 16 位...但问题并没有解决。

然后我还注意到,如果我对 UIView 进行动画处理,FPS 会更差。 所以 SpriteKit 和 UIKit 的结合肯定存在问题。 我可以在呈现 UIView 之前暂停场景,并在 View 再次消失后取消暂停一两秒,是的,也许用户不会注意到问题..

但是,如果我想在 UIView 的背景中运行场景(例如无休止的滚动背景),那么当用户进入菜单时背景会不断移动,该怎么办? 我知道,我可以用 SpriteKit 做菜单,但两年前我上次使用 SpriteKit 时,这种方法似乎工作得很好。

最佳答案

好的..如果其他人正在寻找类似 FPS 问题的解决方案,我将发布答案。

在您的意见和建议之后,我尝试了一些不同的方法并解决了一些问题。

我在两台物理设备 iPhone 6S 和 iPad 2 上进行了测试。当然 iPad 2 上的结果要差一些。

UIKit 和 SpriteKit 肯定不能最好地协同工作。 我发现仅在 SpriteKit 场景上呈现其他 UIView 或 UIButton 并没有什么大问题 - FPS 下降了一点,但不是很多,这会对您的场景产生一些重大影响(2-3 FPS)。

如果您尝试使用一些基本动画来为 View 添加动画效果,那么最大的问题就出现了。在这种情况下,FPS(动画发生时)会下降到 40 - 35 FPS,最大的问题是,有时它不会再次提高,直到您制作另一个动画或再次运行场景。 我仍然不知道为什么会发生这种情况,但它是随机发生的。有时 FPS 会提高,有时不会。

另一件对 SpriteKit 帧速率也有重大影响的事情是广告(如果您使用广告)。

我正在使用 AdMobs,他们的文档写得很好,横幅或插页式广告可以对您的帧速率产生影响。我不会在游戏过程中展示广告,但如果你在菜单中展示广告,这会降低你的 FPS,当你运行游戏并且 FPS 再次下降一点时,结果会更糟。 因此,我建议您延迟运行场景或提前隐藏横幅,这样就不会影响您的游戏开始。

我找到了解决方案,可以在游戏结束后立即暂停场景,因此当菜单出现时,我的场景处于暂停模式。再次运行游戏后,我将取消暂停场景。对于我的情况来说,这不是最好的解决方案,但现在效果好多了。

我建议您也使用 SpriteKit 来创建菜单,这样您就不会遇到此类问题。或者甚至更好 - 使用其他游戏引擎来创建游戏。

关于sprite-kit - 呈现 UIView 时 Spritekit FPS 下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41772112/

相关文章:

c++ - 开源网络摄像头库

ios - 如何在 xcode 中为使用 swift 制作的 spritekit 游戏创建主菜单?

ios - SKView 无法正确转换 Sprite-Kit Objective-C

swift:检测哪个 skaction 在组中停止

iphone - 如何使用应用程序委托(delegate)保存状态

c++ - Directshow 返回错误的帧速率 FPS

ios - 加速 SKSpriteNode

ios - 在 Tableview 中,我想知道如何在单元格最后位置设置多行 UILabel

iphone - UIButton图像和背景图像,使用哪一个作为自定义图像?

c++ - SDL FrameRate 上限实现