THREE.JS Object3D.removeFromParent 在 forEach 循环中删除 scene.children 的子项时不是函数错误

THREE.JS Object3D.removeFromParent is not a function error when removing childs of scene.children in forEach loop

提问人:Prze Sadza 提问时间:11/2/2023 更新时间:11/2/2023 访问量:18

问:

我正在尝试删除forEach循环中的临时THREE.JS 3D对象。我的代码正在完成这项工作,但是在我这样做时,控制台中出现“Object3D.removeFromParent不是函数”错误。

我正在开发以不同模式同时显示两个视图的应用程序,因此 this.scenes = [scene1, scene2] 并且我正在使用 Potree 生成点云,这就是为什么我的场景内部有自己的场景。

这就是代码:

    clearTemp() {
      this.scenes.forEach((scene) => {
        scene.scene.children.forEach((child) => {
          if (child.name.includes("temp")) {
            this.#removeObject3D(child)
          }
        })
      })
    }

    #removeObject3D(obj) {
      if (!(obj instanceof THREE.Object3D)) return false;

      if (obj.geometry) obj.geometry.dispose();
  
      if (obj.material) {
          if (obj.material instanceof Array) {
              obj.material.forEach(material => material.dispose());
          } else {
              obj.material.dispose();
          }
      }
      obj.removeFromParent();
      return true;
    }

我尝试像这样使用 Object3D.remove() 函数:

clearTemp() {
      this.scenes.forEach((scene) => {
        scene.scene.children.forEach((child) => {
          if (child.name.includes("temp")) {
            scene.scene.remove(child)
          }
        })
      })
    }

以这种方式执行此操作时,不会出现错误,但不会按预期删除临时对象。

如何正确地做到这一点,删除所有临时对象并摆脱该错误消息?

JavaScript 错误处理 3 个 .js potree

评论


答: 暂无答案