2013-05-05 2 views
0

외부 JSON 모델을 장면에로드하고 해당 값을 head라는 변수에 넣으려고하므로 결과적으로 그것을 현장에 추가하십시오. 나는 내가 JSON 모델을로드하고 난 현재 오전 함수의 헤드 변수에 모든 메쉬를 넣어 뭘하려는이함수의 변수에 로컬 변수 값을 할당하는 방법 [Three.js] JSON 로더

var loader = new THREE.JSONLoader(); 

    this.head = loader.load("eagle2.js", function(geometry) { 

     var material = new THREE.MeshPhongMaterial(), head; 
     head = new THREE.Mesh(geometry, material); 
     head.scale.set(200, 200, 200); 
     head.position.y = 0; 

     return head; 
    }); 

    this.mesh.add(this.head); 

처럼, IS 무슨 짓을

. 내가 실행하지만 위의 코드는 방화범 입력 오류를 보여줍니다. 모델로드가 성공적이지만 오류는 다음과 같습니다.

TypeError: a is undefined Three.js Line 55

이 오류를 해결하려면 어떻게해야합니까?

+0

대신 그렇게 바로 사용이 다음과 같아야합니다, 콜백 함수에서 서버 및 반환 데이터에 대한 비동기 호출을 ; head 변수를 반환하는 대신 함수 내부에서 호출합니다. 무슨 일이 일어나고 있는지는 콜백 함수 내부에서 머리가 가려져 돌아 왔을 때 범위를 벗어나므로 그곳에 액세스 할 수 없다는 것입니다. – gaitat

+0

이렇게하면 다시 오류가 발생합니다. TypeError : this is undefined Line 215 콜백 함수 – monk

+0

에서 "var scope = this;"를 추가하면됩니다. loader.load를 호출하기 직전에 콜백 내부에서 변수 범위를 사용하십시오. 즉. scope.mesh.add (head) 콜백 안에 "this"가 재정의 된 것처럼. – gaitat

답변

2

메서드로드시 JSONLoader가 아무 것도 반환하지 않습니다. (this.head) 당신이 this.mesh.add 이동하면 당신은 문제가 없을 것

var self = this; 
var loader = new THREE.JSONLoader(); 

loader.load("eagle2.js", function(geometry) { 

    var material = new THREE.MeshPhongMaterial(), head; 
    head = new THREE.Mesh(geometry, material); 
    head.scale.set(200, 200, 200); 
    head.position.y = 0; 

    self.head = head; 
    self.mesh.add(head); 
}); 
+0

이 답변을 주셔서 대단히 감사합니다. – monk

관련 문제