three.js - 如何在单击时从 Three.js 场景中删除组?
问题描述
我有一组对象(实际上是弧上的 3D 文本),我想通过特定的点击从场景中删除它们。.remove 对组不起作用吗?这基本上是我所拥有的:
$(".inscript").on("mousedown", function(event){
var x = scene.getObjectByName("inscriptArc");
scene.remove(x);
});
这个答案似乎表明您可以(使用 .remove 从场景中删除一个组),但它对我不起作用。
解决方案
THREE.Scene.getObjectByName 返回具有该名称的孩子的第一个实例。如果你有多个,你不会通过调用一次来捕获它们。
要删除所有实例,我将使用 THREE.Object.traverse(fn(child){}) 函数,即:
var children_to_remove = [];
scene.traverse(function(child){
if(child.name == "inscriptArc"){
children_to_remove.push(child);
}
});
children_to_remove.forEach(function(child){
scene.remove(child);
});
你也许可以做
scene.traverse(function(child){
if(child.name == "inscriptArc"){
scene.remove(child);
}
});
但我认为在某些情况下,如果您从场景中异步加载/删除任何东西,这可能会导致错误 - 因为当孩子的孩子被遍历时,移除孩子可能会引发错误。不确定,所以我会尝试简单的,如果它引起问题,我会换成更复杂的。
推荐阅读
- git - Git 别名,适用于 `main` 或 `master` 或其他
- javascript - 如何从 Django Location PointField 获取纬度和经度
- android - 为什么我的应用程序应该只有 70mb 左右,却超过 300mb?
- automation - 如何在ansible中发送多个标准输入
- json - 如何在flutter中从动态url中获取json数据
- solr - Solr REST API - 强制 POST 替换托管资源
- graphql - GraphQL Generics Unexpected Value Type Error
- javascript - 我怎样才能不断重复第一个承诺,直到第二个承诺解决?
- mongodb - Mongodb - 在不同文档的不同字段中按相同值分组
- r - SQL:将每小时样本分块为 7 天平均值