我们有一款运行Phaser .JS的游戏。 Whilie使用浏览器,似乎内存不断增长。
清洁物体的正确方法是什么?
答案 0 :(得分:1)
我会缩小我的答案,使其可用。
Phaser 2声称大多数对象可以通过为其引用分配null来简单地解除引用,并且应该触发垃圾回收。
而其他人,比如TilemapLayers,将明确需要特定的调用它们的析构函数。
可以选择销毁像Particle这样的其他人(例如Particle.kill()
)。
然而,正如您所知,自动垃圾收集器并不总是好的,特别是如果您长时间打开浏览器,它会泄漏内存。
所以你应该杀死,停止,删除和摧毁一切,甚至是可选对象。即使您没有找到特定的析构函数,大多数对象仍继承自PIXI.DisplayObject,因此实现.RemoveChild
和变体。特别是父Phaser.Stage
转到此处:https://phaser.io/learn/chains
搜索以下内容:destroy
removeAll
.stage.remove
(和remove
及其所有前缀和后缀,包括removeChild和variants)stop
kill
。
如果您没有找到特定的析构函数,请记住PIXI.DisplayObject继承和removeChild / ren。
还记得在退出时调用Stage.removeStageReference()
。
我希望有帮助
答案 1 :(得分:0)
在 Phaser 3(我不知道 Phaser2)中,移除子游戏对象是不够的。除非你也调用它的destroy()方法,否则它会消耗内存。