三个js孩子长

问题描述 投票:1回答:2

我创建了一个三个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 = [];

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

javascript three.js
2个回答
1
投票

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


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的删除(对象,...):

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

THREE.Geometry处理dispose():

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

THREE.Material处理dispose():

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

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

(THREE.js r85)。

© www.soinside.com 2019 - 2024. All rights reserved.