"Dive Into SpriteKit"示例代码的性能问题



我与儿子一起使用了Paul Hudson的SpriteKit书,与儿子一起制作了基本的SpriteKit游戏。

游戏只是一个绘制船,一堆太空垃圾并提供基本控制的Skscene。游戏结束后,我们按照本书的说明进行操作:

DispatchQueue.main.asyncAfter(deadline: .now() + 3) {
    if let scene = GameScene(fileNamed: "GameScene") {
        scene.scaleMode = .aspectFill
        self.view?.presentScene(scene)
    }
}

不幸的是,每个新游戏场景FPS都会下降,在我iPad上约20场比赛后,游戏是无法玩的。我猜某些东西没有正确地进行开创性化,但我不确定在哪里看以及如何解决此问题。

我检查了本书的"规范"实现,它们在iOS 12上都有完全相同的问题。

我们在github上的完整实施。

我将感谢有关如何管理场景生命周期以保持性能的建议。

谢谢 @0x141e解决方案和建议!

问题与计时器(用于将节点添加到场景中(。计时器在运行循环中运行,必须与以下方式无效:

timer!.invalidate()

在两个计时器中添加游戏中的无效均解决了主要的性能降解问题以及内存泄漏。

遵循建议,我们了解了更多有关滑雪的信息,另一种按计划创建空间垃圾的方法似乎是:

run(SKAction.repeatForever(SKAction.sequence([
    SKAction.run(createEnemy),
    SKAction.wait(forDuration: 0.45)
    ])))

在这种情况下,我们仍然需要确保停止游戏中的所有动作。

removeAllActions()

最新更新