に、私はこのような複数のオブジェクト(簡略化した例)をロードするためにJSONLoaderへの複数の呼び出しを持っている場合:THREE.jsで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);
}
}
どのように私は、メッシュは、コールバックに戻ってきたかを決定することができます特に頻繁に不通に到着したときは?
私は、1つの汎用コールバック関数で複数の返されたメッシュを処理しようとしています。返されたジオメトリに、テストできる元のファイル名を示すプロパティがありますか?
もっとエレガントな方法がありますか?各コールの新しいTHREE.JSONLoaderオブジェクトを作成すると、コールバック関数がどのメッシュが到着したかを判断するのに役立ちますか?
私はどんなヘルプ/アイデアにも感謝します!ありがとう!
素晴らしい...私はこれを得ることができた。関数内で関数を返すことは決して考えられませんでした。私は本当にここで何が起こっているのか本当に興味があります...どうすればこのことがうまくいくのかを説明してください。 – Dev
@Devこれは[クロージャ](https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures)と呼ばれるものです。 'meshloader(" mesh1.js ")'が引数として渡されるとき、それは直接(括弧の存在のために)実行されます。実行されると、別の関数を返します。つまり、無名関数 'function(geometry){...}'を引数として渡したのとまったく同じですが、この無名関数が変数 'fileName'が定義されているコンテキストでコールバックとして実行され、値 '' mesh1.js ''となります。 – Pioul