Threejs 从场景中删除所有对象

新手上路,请多包涵

我试图制作一个函数来在一次拍摄中从场景中删除所有对象,但它只删除了一个对象以供调用。

 GeometryModel.prototype.clearScene = function(scene) {
var i;
for(i=0; i < scene.children.length; i++){
     obj = scene.children[i];
     scene.remove(obj);
  }
}

我尝试过的另一个解决方案是:

 scene.children={};

但我不确定它是否正确。

原文由 Stefano Maglione 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 988
2 个回答

你必须做相反的事情:

 for( var i = scene.children.length - 1; i >= 0; i--) {
     obj = scene.children[i];
     scene.remove(obj);
}

因为在每次迭代中 .children 数组会发生变化,一旦您从头开始执行 .remove() 并且该数组的索引会发生变化。

如果您想更好地理解它,请展开 for 循环并遵循数组中的索引。

原文由 gaitat 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以使用 while 完成此操作:

 while (object.children.length)
{
    object.remove(object.children[0]);
}

说明:

object.children.length 如果 object.children.length 不为 0 则 返回 true ,如果它等于 0 则返回 false

所以只要对象有子元素,你只需要删除第一个子元素。

原文由 csblo 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题