无法使用Three.JS删除对象

Jos*_*osé 7 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

/ 这会杀死不是飞机或相机的每个物体;-) /

它删除了一些盒子,但不是全部= =(我怎么能删除所有盒子?问候,José

小智 21

在删除这样的数组对象时,您需要返回前端,而不是前后.

var obj, i;
for ( i = scene.children.length - 1; i >= 0 ; i -- ) {
    obj = scene.children[ i ];
    if ( obj !== plane && obj !== camera) {
        scene.remove(obj);
    }
}
Run Code Online (Sandbox Code Playgroud)

发生的事情是当一个节点移除一个节点,所有节点移位后.假设您删除了scene.children [0]:children [1]将成为新的0,2将变为1等.当从0到array.length时,for循环已经移动并且正在跳过1个节点你删除的每一个.

作为额外的加分,这应该稍快一些,特别是如果你有很多对象,因为scene.children.length只获得一次,而不是每个循环.