如何在Paper.js

时间:2015-10-30 14:19:19

标签: javascript canvas paperjs

我制作了一部无限时间的动画片。我已经在动画中使用了各种对象,这些对象从一种形状转换为另一种形状然后我创建了一个新对象来取出那个地方并删除旧对象。

示例: 有一个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()后,它们是否仍然存在于内存中?如果是的话,摧毁它们的最佳方法是什么?

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

提前致谢。

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

1 个答案:

答案 0 :(得分:3)

如果您删除该项目,则纸张中没有对其进行引用,因此如果您未在代码中保留对它的引用,它最终将在垃圾回收中清理。 JavaScript没有办法实际删除对象;正如@Pogrindis所指出的,它所做的就是从对象中删除属性。这可以间接导致垃圾收集通过删除对象的引用来释放内存,但它本身不释放内存。

这里有sketch创建10000个对象并覆盖它们10次。如果您为内存使用创建Chrome时间轴,则会在内存使用完成后看到内存使用情况稳定下来。 Net:看起来纸张在调用item.remove()时会释放对项目的所有引用。