我有一个简单的SKScene生成的代码,从故事板中的SKView呈现。这个场景包含一个30 x18像素的艺术图像,没有动画,没有更新。
由于某种原因,这样一个简单的场景随机下降到40 FPS,没有明确的解释。CPU使用率总是~14%或更低的应用程序,所以这似乎是非常不必要的。
我找不到关于这个问题的很多有用的帖子,除了一个声称CADisplayLink导致这个问题的帖子。我不使用这个框架,但是我的应用程序使用CAGradientLayer,让我相信Core Animation通常会导致这个问题。
在我的应用程序中禁用它显著降低了这个问题的频率。以前我会看到它20次,现在我只看到一次。然而,它仍然发生。有人对此问题有任何建议吗?
谢谢!
2条答案
按热度按时间ni65a41a1#
看来我的预感是对的Core Animation(可能还有UIKit Animation)会干扰SpriteKit。当场景加载时,禁用应用程序中任何活动的
CABasicAnimation
和UIView.animate
示例解决了这个问题。希望这对某人有帮助!
cmssoen22#
确保已优化SKView设置。特别是,请检查以下属性:忽略兄弟顺序:将此属性设置为true可避免强制执行z顺序渲染。当您有简单场景时,这可以提高性能。检查它:https://developer.apple.com/documentation/spritekit/skview/1520215-ignoressiblingorder
shouldRasterize:如果你使用的是CAGradientLayer或其他Core Animation图层,请尝试将图层的shouldRasterize属性设置为true。这将以位图的形式缓存图层内容,从而可能以内存使用为代价来提高性能。请检查:https://developer.apple.com/documentation/quartzcore/calayer/1410905-shouldrasterize
减少SKScene更新:如果您不需要在SKScene中进行任何更新或动画,您可以删除更新方法以保存CPU周期。优化资源:即使你使用的是小像素的艺术图像,也要确保它已经过优化。尽可能使用压缩的纹理,并确保图像的大小是2的幂32x32而不是30x18。在不同的设备上测试:在各种设备上测试您的应用,以查看问题是否在所有设备上持续存在。这将帮助您确定这是特定于设备的问题还是更一般的性能问题。