1

Three.js Json-Loader に問題があります。パスが配列に保存されているオブジェクトがあります。今、それらをロードしてリストに並べ替えて、それらを選択できるようにします。しかし、それらがロードされる順序は、サイズが異なるため、ロード後の配列内の順序とは異なります。小さいものが最初で、大きいものが最後です。したがって、それらをロードした後、オブジェクトの名前がわかりません(名前はパスです)。
私のコード:

for(var j=0;j<21;j++){
        var path = objPath[j];
        loader.load( path, function( geometry ) { save(geometry, path); } );
    }


このコードでは、パスは保存メソッドに与えられますが、for ループは読み込みメソッドよりも高速であるため、常に最後の (objPath[20]) パスが存在します。正しい道を歩むにはどうすればいいですか?

4

1 に答える 1

0

JavaScript クロージャー ルールに関連するかなり一般的な間違いに悩まされています。このリンクを参照してください。つまり、保存関数に渡される正しいパスを取得するには、次のようにヘルパー関数ファクトリにラップする必要があります: (または上記のリンクに示されているように)

function saveHelper(path) {
    return function(geometry) {
        save(geometry, path);
    }
}

for(var j=0;j<21;j++){
    var path = objPath[j];
    loader.load( path, saveHelper(path) );
}
于 2012-10-15T13:54:19.117 に答える