Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

140
Visualizações
Three.js OBJ y MTL Loaders no se llaman en bucle

Estoy usando THREE.js OBJ y MTL Loader en un bucle para mostrar diferentes elementos de un pastel animado en 3D. Necesito esos elementos diferentes porque quiero que el usuario pueda cambiar el color de esos elementos específicos (por ejemplo, la decoración) del pastel.

Pero cada vez que presiono una función THREE.load, la ejecución de la iteración del ciclo se detiene y comienza con la siguiente (i ++). Soy nuevo en Javascript. Así que no estoy seguro de si me falta una comprensión general de los bucles.

Solo en el último paso se llama y ejecuta correctamente la función de carga. Si uso exactamente el mismo código sin un bucle, sino que proporciono el material-/objectPath codificado y uso varios cargadores, todo funciona bien.

 function draw(currentlySelectedCake){ layerArray = []; // Load Cake var i; for (i = 0; i < currentCakeElements.length; i++){ if(currentCakeElements[i].endsWith(".mtl")){ var materialPath = "uploads/" +currentlySelectedCake + "/" + currentCakeElements[i]; var objectPath = "uploads/" +currentlySelectedCake + "/" + currentCakeElements[i+1]; var cakeLoader = new THREE.MTLLoader(); cakeLoader.load(materialPath, function (materials) { materials.preload(); // Load the Cake var objLoader = new THREE.OBJLoader(); objLoader.setMaterials(materials); objLoader.load(objectPath , function (object) { layer1 = object.clone(); layer2 = object.clone(); layer3 = object.clone(); layer1.name = "Layer1Part" + i; layer2.name = "Layer2Part" + i; layer3.name = "Layer3Part" + i; layer1.traverse((child) => { if (child.isMesh) { child.material = child.material.clone(); } }); layer2.traverse((child) => { if (child.isMesh) { child.material = child.material.clone(); } }); layer3.traverse((child) => { if (child.isMesh) { child.material = child.material.clone(); } }); layer2.position.y = tortenhoehe; layer3.position.y = tortenhoehe*2*0.75; camera.lookAt(layer2.position); layer1Group.add(layer1); layer1Group.name = "Layer1"; layer2Group.add(layer2); layer2Group.name = "Layer2"; layer3Group.add(layer3); layer3Group.name = "Layer3"; }); layer1Elements.push(layer1Group); layer2Elements.push(layer2Group); layer3Elements.push(layer3Group); }); } }); } }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que esto aquí fue mi solución. Todavía en el proceso final de prueba. Pero se ve bien hasta ahora.

https://www.albertgao.xyz/2016/08/25/por-que-no-hacer-funciones-dentro-de-un-bucle-en-javascript/

  1. la variable i y j se declaran primero
  2. Cuando se ejecuta el primer bucle, se ha creado una función anónima dentro del bucle.
  3. Dentro de la función anónima recién creada, se refirió a una variable i que no está en su alcance
  4. Después del primer ciclo, el valor de la variable i se acumula a 3 ya que el ciclo se ejecuta 3 veces.
  5. En el segundo bucle, se invocará cada función creada en el primer bucle.
  6. Cuando se invoca, el intérprete verificará el valor de i y descubrió que no hay i dentro.
  7. Dado que este anónimo se ha convertido en un cierre, el intérprete mirará su cadena de alcance.
  8. Finalmente, el intérprete encuentra la variable i , en el ámbito global, aún dentro de su ámbito léxico, que es totalmente legítimo para que esta función anónima se refiera.
  9. Y el valor de i es 3 . Lo resolvimos en el paso 4.
  10. Por lo tanto, se emitirá un 3 .
  11. Lo que sucede después para el segundo y tercer bucle es totalmente igual al paso 6~10.
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda