三个js孩子长

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三个js孩子长相关的知识,希望对你有一定的参考价值。

我创建了一个三个js对象,并添加了一些孩子。然后我把孩子的长度改为0.然后对象已经离开了屏幕。是否会使对象完全从屏幕和内存中删除?

var balls = new THREE.Object3D();  // parent

创造儿童

var geometry = new THREE.SphereGeometry(5, 32, 32);
var material = new THREE.MeshPhongMaterial({color: 0x0f0ff0, shininess: 50, transparent: true, opacity: 1});
var sphere = new THREE.Mesh(geometry, material);
sphere.position.x = scale('some random value');
sphere.position.y = scale('some random value');
balls.add(sphere);

以上步骤重复更多球体

然后在我写的控制台

balls.children = [];

这将从场景中删除所有球体。是否会从内存中删除所有球体对象?

答案

是的,当你有一个数组然后设置array.length = 0;时,数组的所有元素都将被删除。键入array.length = 2时,将删除除前两个元素之外的所有元素。 javascript有一个名为slice()的函数,它做了类似的事情。

另一答案

删除子项的正确方法是从其父项调用remove(child),然后对子项的材质和几何使用dispose()。

在你的代码中:

var balls = new THREE.Object3D();  // parent

var geometry = new THREE.SphereGeometry(5, 32, 32);
var material = new THREE.MeshPhongMaterial({color: 0x0f0ff0, shininess: 50, transparent: true, opacity: 1});
var sphere = new THREE.Mesh(geometry, material);
sphere.position.x = scale('some random value');
sphere.position.y = scale('some random value');
balls.add(sphere);

// Do some work

balls.remove(sphere);
geometry.dispose();
material.dispose();

仅在材料/几何体不再被其他网格使用时处理。

来自THREE.Object3D的删除(对象,...):

“删除对象作为此对象的子对象。可以删除任意数量的对象。”

THREE.Geometry处理dispose():

“删除几何体时不要忘记调用此方法,因为它可能导致内存泄漏。”

THREE.Material处理dispose():

“这是处理材料。材料的纹理不会被处理。这些需要通过纹理处理。”

如果你使用textures,你也必须处理这些。

(THREE.js r85)。

以上是关于三个js孩子长的主要内容,如果未能解决你的问题,请参考以下文章

“ScrollView 只能承载 1 个孩子”在 2 个片段中只有 1 个孩子?

三个 JS Palette 循环着色器

怎样才能长高 让孩子快速长高的好方法

JS取出最后的三个字符

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

VSCode自定义代码片段——JS中的面向对象编程