Estoy tratando de crear varios duplicados de una malla distribuida aleatoriamente alrededor de mi escena THREE.Js. He usado el método clone() en un bucle for para hacerlo. La matriz muestra una lista de los clones que creé en la consola, pero cuando intento llamar a los elementos individuales de la matriz, me devuelven undefined en la consola. Este es el código que probé:
let ball = new THREE.Mesh(); loader.load( './ball.gltf', function ( gltf ) { gltf.scene.traverse(function(model) { //for gltf shadows! if (model.isMesh) { model.castShadow = true; model.material = sphereMaterial; } }); ball = gltf.scene scene.add( ball ); for (let i = 1; i <= 9; i++) { let newBall = ball.clone() scene.add(newBall) newBall.position.set(Math.floor(Math.random() * 20) * 2 - 10, Math.floor(Math.random() * 20) * 3 - 10, Math.floor(Math.random() * 20) * 2 - 10) pos_arr.push(newBall) } }, undefined, function ( error ) { console.error( error ); } ); Esto es lo que obtengo cuando llamo a console.log(pos_arr) :
Entonces, si tuviera que llamar, digamos console.log(pos_arr[2]) , obtendría undefined .
Por casualidad, ¿alguien sabe qué está pasando aquí?
La causa raíz habitual de este problema es que accede a pos_arr demasiado pronto. Significado antes de que se haya ejecutado la devolución de llamada onLoad() de GLTFLoader .
Hay varias formas de solucionar este problema y la solución depende principalmente de cómo haya estructurado su aplicación. Un enfoque que siempre se puede usar es pasar una instancia de LoadingManager a todos sus cargadores y usar su devolución de llamada onLoad() para finalizar la configuración de su escena o iniciar el acceso a objetos.