我正在开发一个PIXI.js应用程序并清理资源以防止内存泄漏我正在使用DisplayObject.destroy
。
当显示对象被销毁时,其许多内部值设置为null
,_destroyed
设置为true。
这证明是有问题的,因为一些应用程序是基于事件而不是基于游戏循环。由于缺少转换,这些逻辑中的一些试图改变显示对象和错误。
如果显示对象的项目(如位置和比例)不是无人看守的吸气剂,我就可以侥幸成功。
get x() {
// Unguarded will error out if this.position is null!
return this.position.x;
}
现在,因为我在一个Typescript环境中,我正在扩展显示对象并覆盖x,y等:
get x() {
// As this.position is also a getter we have to go to transform to be safe
return this.transform && this.position.x;
}
应如何处理?
为什么DisplayObject._destroyed
是私有的?
答案 0 :(得分:0)
Pace对于有关事件监听器的评论是正确的。对我而言,听起来可能已经存在内存泄漏的逻辑。由于您保留对使用PIXI .destroy方法销毁的对象的引用。因此,即使您从PIXI(例如从GPU)销毁它们,您仍然将对象保留在CPU / javascripts内存中。
如果您仍然希望这样做,我宁愿建议您自己创建功能,而不是覆盖PIXI自己的功能。因为当PIXI获取getter更新时,你可能会因为覆盖了getter而遇到了令人讨厌的错误。所以做出类似的事情:
destroyObject(displayObject) {
displayObject.destroy();
displayObject.customDestroyed = true;
}