En Three.js, si tengo varias llamadas a la JSONLoader para cargar varios objetos de este tipo (ejemplo simplificado):Three.js JSONLoader
function init() {
var loader = new THREE.JSONLoader();
loader.load("mesh1.js", createScene);
loader.load("mesh2.js", createScene);
}
function createScene(geometry) {
if (geometry.filename == "mesh1.js") {
mesh1 = new THREE.Mesh(geometry, material);
scene.add(mesh1);
} else if (geometry.filename == "mesh2.js") {
mesh2 = new THREE.Mesh(geometry, material);
scene.add(mesh2);
}
}
¿Cómo puedo determinar qué malla ha sido devuelta a la devolución de llamada , especialmente cuando con frecuencia llegan fuera de servicio?
Estoy tratando de manejar múltiples mallas devueltas con una sola función de devolución de llamada genérica. ¿Hay alguna propiedad en la geometría devuelta que indique el nombre del archivo original con el que puedo probar?
¿O tal vez hay una manera más elegante? Quizás la creación de un nuevo objeto THREE.JSONLoader para cada llamada ayudaría a la función de devolución de llamada a determinar qué malla ha llegado.
Agradezco cualquier ayuda/ideas! ¡Gracias!
fantástico ... Pude hacer que esto funcionara. Nunca pensé devolver una función dentro de una función. Tengo mucha curiosidad sobre qué es exactamente lo que está pasando aquí ... ¿Podrían explicarme un poco cómo/por qué funciona esto o señalarme una documentación? – Dev
@Dev Esto es lo que se llama un [cierre] (https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures). Cuando 'meshloader (" mesh1.js ")' se pasa como un argumento, se ejecuta directamente (debido a la presencia de paréntesis). Cuando se ejecuta, devuelve otra función. Por lo tanto, es exactamente como si pasara la función anónima 'función (geometría) {...}' como argumento, con la excepción de que esta función anónima se ejecutará como una devolución de llamada en un contexto donde la variable 'nombredearchivo' está definida y tiene el value '" mesh1.js "'. – Pioul