ThreeJS:在同一场景中删除并加载新对象

问题描述 投票:0回答:1

我有一个场景,我添加了一个菜单,可以在此场景中选择要播放的风格,现代还是经典。两种场景都可以正常工作,当我更改样式时,我从场景中删除了所有对象以初始化新对象。当加载新场景时,因为您可以玩(我选中了),但您看不到游戏区域只有灰色背景,通常它应该像开始时一样在菜单背景上呈现。我如何删除对象:

  // Remove object from previous scene 
  function cleanScene(){
    deleteObjectFromScene();
    RemoveSceneChild();
    console.log("Deleting Scene done ! ");
    setTimeout(go, 1500);
  }

function deleteObjectFromScene(){
  const cleanMaterial = material => {
    console.log('dispose material!');
    material.dispose();

    // dispose textures
    for (const key of Object.keys(material)) {
      const value = material[key];
      if (value && typeof value === 'object' && 'minFilter' in value) {
        console.log('dispose texture!');
        value.dispose();
      }
    }
  }

  console.log('dispose renderer!');
  renderer.dispose();
  scene.traverse(object => {
    if (!object.isMesh) return;

    console.log('dispose geometry!');
    object.geometry.dispose();

    if (object.material.isMaterial) {
      cleanMaterial(object.material);
    } else {
      // an array of materials
      for (const material of object.material) cleanMaterial(material)
    }
  })
}

function RemoveSceneChild(){
  while(scene.children.length > 0){ 
    scene.remove(scene.children[0]); 
  }
}

删除后,我调用go(),我从一开始就使用此函数启动游戏,它的功能是初始化我们需要的所有东西,渲染器,相机,对象...我不知道问题出在哪里,我以为它来自渲染器,但似乎调用正确。When launching the gamewhen changing style

three.js rendering render dispose scene
1个回答
0
投票

我想我可以为您提供帮助,您有一个git存储库吗?

© www.soinside.com 2019 - 2024. All rights reserved.