gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:12:14 25 4
gpt4 key购买 nike

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

示例:有一个 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 正在释放对项目的所有引用。

关于javascript - 如何从 Paper.js 的图层中销毁特定(而不是删除)对象/路径/子组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33438184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com