如何从 Paper.js 中的图层中销毁特定(而不是移除)objects/paths/group-children

How to destroy specific ( not remove ) objects/paths/group-children from layer in Paper.js

我正在制作一个 运行 无限时间的动画。我在动画中使用了各种对象,这些对象从一种形状转换为另一种形状,然后我创建了一个新对象来取代旧对象。

示例: 有一个 Rectangle 对象,我修改了段以将其转换为圆形。然后我在同一点插入一个新的 Circle 对象并删除旧的 Rectangle 对象。 当我将这些对象添加到组并修改它们时,会发生类似的事情。

问题: 当我删除对象时,我从路径中删除所有段,然后使用 javascript 中的 delete 关键字删除我保存路径的对象。

创作:

var Obj = {};
Obj.line = new Path.Line({
    segments: [new Point.random() * view.size, new Point.random() * view.size],
    storkeColor: 'black',
    fillColor: 'black'
});
Obj.vector = new Point({
    angle: 360 * Math.random(),
    length: Math.random() * 10
});

删除:

Obj.line.removeSegments();
delete Obj;

使用这种方法,线条从场景中移除,动画继续。

问题:

1) 这行是否在记忆中留下了痕迹?彻底摧毁这个物体的最好方法是什么?因为这个过程重复多次,我担心会影响性能的内存问题。

2) 组的情况相同。我使用 group.removeChildren() 删除组子项,并且在文档中提到这些子项没有被销毁并且可以添加回场景中。 使用group.removeChildren()后,它们还存在于内存中吗?如果有,最好的销毁方法是什么?

我试图找出如何销毁对象而不是删除它们,但没有找到任何解决方案。请询问您是否需要更多详细信息。

提前致谢。

编辑: 我发现有一个可能的解决方案是删除图层本身。我不是在寻找那个,因为所有其他对象都在同一层中,因此删除该层也会删除那些对象。

如果您删除该项目,文件中将没有对它的引用,因此如果您不在代码中保留对它的引用,它最终会在垃圾回收中被清理掉。 JavaScript 没有真正删除对象的方法;正如@Pogrindis 指出的那样,它所做的只是从对象中删除属性。这会间接导致垃圾收集通过删除对对象的引用来释放内存,但它本身不会释放内存。

这里有一个 sketch 创建了 10000 个对象并覆盖它们 10 次。如果您为内存使用创建一个 Chrome 时间线,您会看到内存使用在完成后稳定到基线。 Net:当 item.remove() 被调用时,似乎 paper 正在释放对项目的所有引用。