2012-10-15 2 views
1

Three.js Json-Loader에 문제가 있습니다. 나는 그들의 경로가 배열에 저장된 어떤 객체를 가지고있다. 이제 목록을로드 할 수 있도록 목록에서로드하고 정렬하려고합니다. 하지만로드 된 순서는로드 후 다른 배열과 크기가 다르기 때문에 작은 배열이 먼저 배열되고 큰 배열이 마지막 배열이기 때문에 배열과 다릅니다. 그래서 그들을로드 한 후에 나는 객체의 이름을 모른다 (이름은 경로 임).
내 코드 : 경로가 저장 메도 부여되지만를위한 루프가 빠르게 때문에 지난 (objPath [20]) 경로는 항상이이 코드
Three.js로드 순서

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


적재 방법보다. 경로가 맞다고 어떻게 할 수 있습니까?

+0

배열에서 수천 obj 및 너무 오래 걸릴 것보다. – Phipps

+0

@Neil, 병렬 적으로나 비동기 적으로 동기 적으로 의미하는 것이이 상황에서 거의 동일한 것입니까? 어떤 경우 든 하나를로드하는 것은 게으른 사람의 솔루션 (실제 문제를 찾고 싶어하지 않음)이며로드 시간을 늘릴 수 있습니다. – Tapio

+0

나는 그것에 대해서도 생각했지만 tapio는 진정한 해결책을 찾는다 고 말했다. – Phipps

답변

0

JavaScript 닫힘 규칙과 관련된 일반적인 실수로 인해 물릴 수 있습니다 (this link 참조). 즉, save 함수에 전달 된 올바른 경로를 얻으려면 다음과 같이 도우미 함수 팩터 리로 포장해야합니다. (또는 위 링크에 표시된대로)

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)); 
} 
+0

대단히 감사합니다! 그것은 작동합니다! – Phipps