我和儿子一起使用Dive Into SpriteKit book by Paul Hudson中的分步教程制作了一个基本的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上都有完全相同的问题。
我们的complete implementation on GitHub。
我将感谢有关如何管理场景生命周期以保持性能的建议。
答案 0 :(得分:0)
感谢@ 0x141E提供解决方案和建议!
问题出在计时器上(用于将节点添加到场景中)。计时器在“运行循环”中运行,并且必须使用以下命令使其无效:
timer!.invalidate()
在GameOver中为这两个计时器添加了无效性,从而解决了主要的性能下降问题以及内存泄漏。
根据建议,我们了解了更多有关SKAction的知识,按计划创建太空垃圾的另一种方法似乎是:
run(SKAction.repeatForever(SKAction.sequence([
SKAction.run(createEnemy),
SKAction.wait(forDuration: 0.45)
])))
在这种情况下,我们仍然需要确保停止GameOver中的所有动作。
removeAllActions()