三个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 个孩子?