如何处理被破坏的物体?

时间:2017-06-14 14:46:26

标签: typescript pixi.js

我正在开发一个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是私有的?

1 个答案:

答案 0 :(得分:0)

Pace对于有关事件监听器的评论是正确的。对我而言,听起来可能已经存在内存泄漏的逻辑。由于您保留对使用PIXI .destroy方法销毁的对象的引用。因此,即使您从PIXI(例如从GPU)销毁它们,您仍然将对象保留在CPU / javascripts内存中。

如果您仍然希望这样做,我宁愿建议您自己创建功能,而不是覆盖PIXI自己的功能。因为当PIXI获取getter更新时,你可能会因为覆盖了getter而遇到了令人讨厌的错误。所以做出类似的事情:

destroyObject(displayObject) {
    displayObject.destroy();
    displayObject.customDestroyed = true;
}