三个js孩子长

时间:2016-10-24 06:03:42

标签: javascript three.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 = [];

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

2 个答案:

答案 0 :(得分:1)

是的,当你有一个数组然后设置array.length = 0;时,将删除该数组的所有元素。键入array.length = 2时,将删除除前两个元素之外的所有元素。 Javascript有一个名为slice()的函数,可以执行类似的操作。

答案 1 :(得分:0)

删除子项的正确方法是从其父项调用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 删除(对象,...)

  

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

来自 dispose()的THREE.Geometry

  

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

来自 dispose()的THREE.Material

  

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

如果您使用textures,则必须同时处理这些内容。

(THREE.js r85)。