Phaser .js 内存泄漏。如何在 Phaser Canvas 应用程序中正确释放对象?

Phaser .js memory leak. how properly release objects within Phaser Canvas app?

我们有一款游戏 运行 Phaser .JS。 使用浏览器时,内存似乎一直在增长。

清理物品的正确方法是什么?

我会压缩我的答案以使其可用。

Phaser 2 声称大多数对象可以通过将 null 分配给它们的引用来简单地解除引用,这 应该 触发垃圾收集。

相反,其他的,如 TilemapLayers,将明确需要调用特定的析构函数。

其他的如粒子可以选择性地销毁(例如Particle.kill())。

然而,正如您所发现的,自动垃圾收集器并不总是很好,尤其是如果您长时间打开浏览器,它会泄漏内存。

所以你应该杀死、停止、移除和销毁一切,甚至是可选对象。即使您没有找到特定的析构函数,大多数对象都继承自 PIXI.DisplayObject 并因此实现 .RemoveChild 和变体。特别是父Phaser.Stage

转到这里:https://phaser.io/learn/chains

搜索这些:destroy removeAll .stage.remove(和 remove 及其所有前缀和后缀,包括 removeChild 和变体)stop kill.

如果没有找到具体的析构函数,记得PIXI.DisplayObject继承和removeChild/ren.

还记得在退出时调用 Stage.removeStageReference()

希望对你有所帮助

在 Phaser 3(我不知道 Phaser2)中,移除子游戏对象是不够的。除非你也调用它的destroy()方法,否则它会消耗内存。