Typescript 如何处理被破坏的物体?

Typescript 如何处理被破坏的物体?,typescript,pixi.js,Typescript,Pixi.js,我正在开发一个PIXI.js应用程序,为了防止内存泄漏,我正在使用DisplayObject.destroy 当一个显示对象被销毁时,它的许多内部值被设置为null,\u destrocted被设置为true 这证明是有问题的,因为一些应用程序是基于事件的,而不是基于游戏循环的。由于缺少转换,这种逻辑试图改变显示对象和错误 如果显示对象的项目(如位置和比例)不是不受保护的getter,我就能够避免这种情况 get x() { // Unguarded will error out if th

我正在开发一个PIXI.js应用程序,为了防止内存泄漏,我正在使用
DisplayObject.destroy

当一个显示对象被销毁时,它的许多内部值被设置为
null
\u destrocted
被设置为true

这证明是有问题的,因为一些应用程序是基于事件的,而不是基于游戏循环的。由于缺少转换,这种逻辑试图改变显示对象和错误

如果显示对象的项目(如位置和比例)不是不受保护的getter,我就能够避免这种情况

get x() {
  // Unguarded will error out if this.position is null!
  return this.position.x;
}
现在,作为Typescript环境中的im,我正在扩展显示对象并用以下内容覆盖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;
}
这应该如何处理?
为什么显示对象是私有的?

佩斯关于事件侦听器的评论是正确的。在我看来,这种逻辑似乎已经存在内存泄漏。由于您保留了对对象的引用,这些对象已使用PIXIs.destroy方法销毁。因此,即使您从PIXI(例如,从GPU)销毁它们,您仍然将对象保留在CPU/javascripts内存中

如果您仍然真的想这样做,我宁愿建议您创建自己的功能,而不要覆盖PIXIs自己的功能。自从PIXI获得getter的更新后,您可能会因为覆盖getter而导致严重的bug。因此,制作类似于:

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

通常,人们希望取消订阅不再有效的事件侦听器。您的事件侦听器不应具有对已销毁对象的引用。销毁将删除事件发射器,这里的问题不是严格意义上的事件侦听器。以存储在某处的显示对象数组为例。在事件(不属于游戏循环的一部分)上,迭代这些对象并将每个对象向左移动。无法判断此数组中的对象是否已被销毁。我想唯一的方法是显式地处理对象被销毁时可能存储的所有位置并更新它们。或者在显示对象上创建一个事件,该事件在销毁时发出。