【问题标题】:FPS continuously dropping when restarting the game重新开始游戏时FPS不断下降
【发布时间】:2016-12-04 01:58:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios swift sprite-kit skscene frame-rate


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 另外我要补充一点,我们应该始终牢记应该删除屏幕外节点,否则它们仍然存在于节点树中并吃掉资源。
    • @Whirlwind,我不会说总是被移除,有时物理会在屏幕外应用,这取决于游戏。但是,是的,如果该节点不会在屏幕外进行任何类型的交互,那么它应该被删除。即使屏幕上的节点数下降,这也只是显示绘图数,而不是树中的节点数
    • 是的,我对此并不完全准确。屏幕外且不需要的节点应从节点树中删除。但我认为这不必提及,因为它已经暗示了。 @Knight0fDragon
    • @Whirlwind 的人很容易受到影响,我从人们向我提出的问题中学到了越来越多的东西,以便更简洁。
    • @AlessandroOrnano 我每次更改屏幕时都会删除孩子,每次通过屏幕时我也会删除节点,但我不确定是否将其从内存中删除,有人可以让我请知道如何从内存中删除东西,因为我的滞后可能是由于 CPU 使用率或因为我一直在内存中保存东西。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多