删除孩子不起作用,只需删除其中的一半

delete child not work it just delete half of them

本文关键字:删除 一半 孩子 不起作用      更新时间:2023-09-26

在此代码中,如果我删除其中的一半,我将无法删除所有子项?? 我得到了错误child在我定义它时没有尊严? 每个节点都有子球体(点头)和边(线) 此方法只删除点头,为什么? 有人可以帮我吗?

function onMouseClick( e ) {

    mouseVector.x = 2 * (e.clientX / containerWidth) - 1;
    mouseVector.y = 1 - 2 * ( e.clientY / containerHeight );

    var raycaster = projector.pickingRay( mouseVector.clone(), camera ),
    intersects = raycaster.intersectObjects( scene.children );

    for( var i = 0; i < intersects.length; i++ ) {
        //INTERSECTED = intersects[0].object;
        INTERSECTED = intersects[i].object;
        //obj = intersection.object;
        alert(INTERSECTED.id);
        /*1-*/      //this
        //scene.remove(INTERSECTED);
        /*2-*/      //or this
        for ( c = 0, cl = INTERSECTED.children.length; c < cl; c ++ ) {
            var child = INTERSECTED.children[ c ];
            alert(child.id);
            //child.parent.remove(obj);
            INTERSECTED.remove(child);
            //var lin = scene.children[child.id+1];
            //r lin = scene.getObjectById(child.id+1, true );
            // alert(child.id+1);
            // INTERSECTED.remove(scene.children[child.id+1]);
        }    
        //scene.remove(INTERSECTED);
        scene.add(INTERSECTED);
        animate();
    }
}
我认为

问题在于您循环了一个正在更改其长度的数组。这与三个无关.js而是您在javascript代码中犯的基本(初学者)错误。
也许你应该重写代码并使用while循环:

while( INTERSECTED.children.length > 0 ){
    var child = INTERSECTED.children[ 0 ];
    INTERSECTED.remove(child);
}