ios - 重启游戏时FPS不断下降

标签 ios swift sprite-kit skscene frame-rate

我正在 SpriteKit 中构建一个新游戏,每次我想重新启动游戏时我都会切换场景,因此每次我按下“再玩一次”时,我的 GameScene 都会从头加载,这会导致我的 FPS 不断下降。

因此,这导致我的 FPS 超时下降,因为每次我按下播放键时,我基本上都必须加载整个新的 GameScene 和上面的游戏(主要是生成节点)。我认为,如果无法将 FPS 限制在特定速率,那么我就不应该在 2 个场景之间使用过渡。

但是,我尝试了将所有内容都保留在 1 个场景中的方法,但不幸的是它没有成功,因为每次我按下重新启动时,生成的 SKSpriteNode 数量都会翻倍。因此,每次我再次玩游戏时,节点的生成和我的计时器都会加快 2 倍。我不知道如何解决这个问题。

最佳答案

每次更改场景时,都应将其与其子项一起从内存中删除。

您可以在场景末尾添加此方法:

deinit {
    print("\n THE SCENE \(type(of: self))) WAS REMOVED FROM MEMORY (DEINIT) \n")
}

如果您在调试控制台中没有看到此输出,则可能您的代码中某处对 self 有很强的引用。 您可以按照官方指南"Resolving Strong Reference Cycles for Closures"

关于ios - 重启游戏时FPS不断下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954605/

相关文章:

swift - 播放一个声音循环,同时至少有一个同类 Sprite 在舞台上

ios - 更新表格单元格内容的问题

ios - CFBundleExecutable key xcode 8.1 的不存在文件

ios - 如何在 info.plist 中打开隐私 VPN 配置

swift - 字典<AnyHashable : Any> where Any may hold nil value in Swift 3

swift - 如何在 Mac OS X 中向 SpriteKit 游戏添加窗口(首选项窗口)?

ios - 让流与 AVAudioPlayer 一起工作

objective-c - 在 Interface Builder 中使用 UITapGestureRecognizers 的问题

ios - FMDB ResultSet 总是只返回一行

ios - 如何在 SpriteKit 中只激活物理体的一侧?