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()方法,否则它会消耗内存。
我们有一款游戏 运行 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()方法,否则它会消耗内存。