我正在完成我的一个项目,一个用Spritekit制作的游戏。 我用UIKit创建了一个小菜单(1个视图和几个按钮)。 我连接了SKScene和View Controller类进行通信,所以当游戏结束时,我可以呈现菜单。
我发现了SKScene FPS的问题。 我已经在苹果开发者论坛上发现了2015年的一些信息,这是第一次在iOS 9中发现这个问题。 当我在SKScene上展示UIView时,我的FPS从60降到40。 在我隐藏UIView并再次运行游戏之后,FPS再次增加......但是在大约2-3秒内,在游戏开始时我的动画会出现滞后。 我尝试首先预先刻录所有纹理图集,但没有任何改变。 比我想象的那样,我的纹理太大了,问题出现在我的动画中,我将所有图像及其质量从32位颜色降低到16 ......但是问题没有解决。
然后我也注意到FPS更糟,如果我动画UIView .. 因此,结合SpriteKit和UIKit存在明显的问题。 我可以在呈现UIView之前暂停场景,并在我的视图再次消失之后取消暂停第二或第二个,是的,也许用户不会注意到问题..
但是如果我想在我的UIView背景中运行我的场景(如无尽的滚动背景),那么当用户进入菜单时背景会不断移动? 我知道,我可以用SpriteKit做菜单,但这种方法似乎在2年前我上次使用SpriteKit时工作正常。
答案 0 :(得分:2)
好的..我正在发布一个答案,如果其他人正在寻找类似FPS问题的解决方案。
在你的评论和建议做了什么之后,我尝试了几件不同的事情,并找出了一些问题。
我在iPhone 6S和iPad 2的两个物理设备上进行了测试。当然,iPad 2上的搜索结果有点糟糕。
UIKit和SpriteKit肯定不是最好的。 我发现在SpriteKit场景上呈现其他UIViews或UIButton没有什么大问题 - FPS下降了一点但不是很多,这会对你的场景造成一些重大影响(2-3 FPS)。
如果您尝试使用某些基本动画制作动画视图,则会出现最大问题。在那种情况下,FPS(动画发生的时间)下降到40 - 35 FPS,这个问题的最大问题是,在你制作另一个动画或再次运行场景之前,它有时不会再次提升。 我仍然不知道为什么会这样,但它是随机发生的。有时FPS会提高,有时也不会。
另一件对SpriteKit帧率有很大影响的事情是广告,如果您正在使用它们。
我正在使用AdMobs,并且在他们的文档中写得很好,横幅广告或插页式广告可以对您的帧速率产生影响。我不会在游戏过程中展示广告,但如果你在菜单中展示它们,这将降低你的FPS,当你运行你的游戏并且你的FPS再次下降一点时,结果会更糟。 所以我建议您延迟运行场景或稍早隐藏横幅,这样就不会对游戏开始产生影响。
我找到了解决问题的方法,一旦游戏结束就暂停了场景,所以当菜单出现时我的场景处于暂停模式。在我再次运行游戏后,我暂停了我的场景。对我的情况来说,这不是最好的解决方案,但现在效果要好得多。
我建议您也使用SpriteKit创建菜单,这样您就不会遇到这样的问题。甚至更好 - 使用其他一些游戏引擎来创建游戏。