简单的 SKScene 随机下降到 40fps

问题描述 投票:0回答:2

我在代码中生成了一个简单的 SKScene,它从情节提要中的 SKView 呈现。此场景包含单个 30x18 像素艺术图像,没有动画,没有更新。

不知何故,这么简单的场景竟然随机掉到40FPS,而且没有明确的解释。应用程序中的 CPU 使用率始终约为 14% 或更低,因此这似乎非常没有必要。

除了声称 CADisplayLink 导致此问题的帖子外,我找不到很多关于此问题的有用帖子。我不使用这个框架,但是我的应用程序使用了 CAGradientLayer,这让我相信 Core Animation 通常会导致这个问题。

在我的应用程序中禁用它显着降低了这个问题的频率。以前我会看到它 20 次,现在我只看到一次。然而,它仍在发生。有人对这个问题有什么建议吗?

谢谢!

swift sprite-kit core-animation
2个回答
0
投票

确保您已经优化了 SKView 设置。尤其要检查以下属性: ignoresSiblingOrder:将此属性设置为 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 周期。 优化资产:即使您使用的是小像素艺术图像,也要确保对其进行优化。尽可能使用压缩纹理,并确保图像的大小为 32x32 的二次方,而不是 30x18。 在不同设备上测试:在各种设备上测试您的应用程序,看看问题是否在所有设备上都存在。这将帮助您确定它是特定于设备的问题还是更普遍的性能问题。


0
投票

看来我的预感是正确的; Core Animation(可能还有 UIKit Animation)会干扰 SpriteKit。加载场景时,在我的应用程序中禁用

CABasicAnimation
UIView.animate
的任何活动实例解决了这个问题。

希望这对某人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.