如何在Paper.js中从层中销毁特定(而不是删除)对象/路径/分组子对象



我正在制作一个将运行无限时间的动画。我在动画中使用了各种对象,这些对象从一个形状转换到另一个形状,然后我创建了一个新对象来代替那个位置并删除旧对象。

示例:有一个矩形对象,我修改了线段,将其转换为圆形。然后在同一点插入一个新的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所指出的,它所做的只是从对象中删除属性。这可能间接导致垃圾回收通过删除对对象的引用来释放内存,但它本身并没有释放内存。

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

最新更新