应该如何处理销毁的对象



我正在开发一个 PIXI.js 应用程序并清理资源以防止我正在使用的内存泄漏DisplayObject.destroy.

销毁显示对象时,其许多内部值设置为 null_destroyed设置为 true。

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

如果显示对象的项目(例如位置和比例(不是不受保护的获取器,我将能够侥幸逃脱。

get x() {
  // Unguarded will error out if this.position is null!
  return this.position.x;
}

现在,作为打字稿环境中的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;
}

应该如何处理?为什么DisplayObject._destroyed是私密的?

Pace 对

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

如果你仍然想走这条路,我宁愿建议你制作自己的功能,而不是覆盖PIXI自己的功能。因为当 PIXI 获得有关 getter 的更新时,您可能会在覆盖 getter 时遇到令人讨厌的错误。所以做一些像这样的东西:

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

相关内容

  • 没有找到相关文章

最新更新