Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法使用Three.JS删除对象_Javascript_3d_Three.js - Fatal编程技术网

Javascript 无法使用Three.JS删除对象

Javascript 无法使用Three.JS删除对象,javascript,3d,three.js,Javascript,3d,Three.js,我正在使用Three.JS制作一个平面,并在上面放置一些盒子 有时我需要把所有的箱子都搬走。因此,我尝试使用以下代码来实现: for ( i = 0; i < scene.children.length; i ++ ) { var object = scene.children[ i ]; if ( object != plane && object != camera) { scene.remove(object); } } fo

我正在使用Three.JS制作一个平面,并在上面放置一些盒子 有时我需要把所有的箱子都搬走。因此,我尝试使用以下代码来实现:

for ( i = 0; i < scene.children.length; i ++ ) {
    var object = scene.children[ i ];
    if ( object != plane && object != camera) {
        scene.remove(object);
    }
}
for(i=0;i
/这会杀死每个不是平面或摄影机的对象;-)/

它删除了一些框,但不是全部=( 如何删除所有框?
您好,José

您应该使用!==而不是!=(速度快了一点)。您是否尝试过单步通过循环并在之后检查场景子对象?可能您将一些框作为子对象添加到平面中,这些框不会被此循环删除。

在删除这样的阵列对象时,您需要返回到前面,而不是前后

var obj, i;
for ( i = scene.children.length - 1; i >= 0 ; i -- ) {
    obj = scene.children[ i ];
    if ( obj !== plane && obj !== camera) {
        scene.remove(obj);
    }
}
当一个节点移动后,所有节点都会移动。假设您移除场景。子节点[0]:子节点[1]将成为新的0,2将成为1,以此类推。 从0转到array.length时,for循环已向前移动,并且每删除一个节点,就会跳过一个节点


另外,这应该会稍微快一点,特别是当您有许多对象时,因为scene.children.length只获取一次,而不是每次循环。

@Crazycatz答案当然是正确的,但现在是2016年,我们可以调用
.slice()
并在数组副本上迭代,而不是手动迭代:

scene.children.slice().forEach(obj => scene.remove(obj))
或者没有ES6糖果:

scene.children.slice().forEach(function(obj) { scene.remove(obj); })

你不应该调用你的var对象。这是对象实际定义的保留关键字。对象应该是好的,对象是保留的(大写o),这不是问题=(.@ama2是对的,不管怎样,@FlavorScape是对的,你不应该把区分大小写的问题留给偶然。不管怎样,只要给它起个别的名字就行了。你明白了!谢谢@Crazycatz!!!=D=D=D=D=D=D=D=D=D=D=D好主意。真是这不是问题,但无论如何感谢您的想法@Sebastian Sachtleben.Greetingshm先生,但是如何删除精确的childrens?出于某些原因,这对我的场景不起作用。children[2]。children.forEach(i=>scene.remove(i)),这对场景也不起作用。remove(scene.getObjectByName(“地球标记”))