Как я могу загрузить массив объектов json в three.js?

Итак, меня смущает асинхронное поведение загрузчика. Вот что у меня есть:

for( i = 0; i < 37; i++ ){
    partLoader.load( "parts/" + filename[i], function ( geometry ) {
        var partMesh = new THREE.Mesh( geometry, basicMat );
        partMesh.position.y = yPos;
        partMesh.position.x = xPos;
        bodyPart.push(partMesh);
        rayCastScene.add( partMesh );
    });
}

Первоначально я устанавливал bodyPart[i] = partMesh, но к тому времени, когда обратный вызов запустился, я = 36, и все они просто перезаписали друг друга в последнем элементе. Нажатие их, по крайней мере, помещает их все в массив, но я понятия не имею, какой индекс относится к какому элементу.

Я использую это с трассировкой лучей, чтобы идентифицировать конкретный объект.if(SELECTED == bodyPart[i]) ...

Здесь аналогичная проблема, но нет решения: THREE.JS загружает массив STL Сетки


person Sammy    schedule 24.11.2014    source источник


Ответы (1)


На самом деле это не про Three.js, проблема в логике, простой пример:

    (function request(){

        $.ajax({
            url: "your path",
            data: "your data",
            timeout: "max respones time from the server in milliseconds"
        })
        .done(function(response){

              //do something with response
              request(); //call request function again
         });

    })();

вы можете создать простой счетчик, чтобы контролировать, сколько раз эта функция будет выполняться

person Smile0ff    schedule 24.11.2014
comment
Я не понимаю, я думаю. Как это будет работать в моем контексте? - person Sammy; 25.11.2014
comment
вы загрузили что-то асинхронное, поэтому ваш for end быстрее, чем ajax, поэтому вам нужно сделать следующую итерацию только после завершения первой, иначе вы получите то, что получите) - person Smile0ff; 25.11.2014