2013-05-05 5 views
0

Я пытаюсь загрузить внешнюю модель JSON в сцену и попытаться поместить ее значение в переменную с именем head, и, следовательно, хочу добавьте его на сцену.Как назначить значение локальной переменной переменной функции [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); 

, что я хочу сделать, это загрузить модель JSON и поместить все сетки переменной головы функции, что я нахожусь в данный момент. Однако, когда я бегу приведенный выше код показывает ошибку типа в firebug. Модель загружается успешно, но ошибка аналогична

TypeError: a is undefined Three.js Line 55

Что мне делать, чтобы исправить эту ошибку?

+0

Вы бы не проблема, если вы двигаетесь this.mesh.add (this.head) ; внутри функции вместо того, чтобы возвращать переменную головы. Что происходит, так это то, что голова включена в функцию обратного вызова и выходит из области действия при возврате, поэтому у вас нет доступа к ней. – gaitat

+0

, когда я сделать это снова бросает ошибку говоря TypeError: это не определено Line 215 он не понимает этого внутри этой функции обратного вызова – monk

+0

то, что вам нужно сделать, это добавить «сферу уаг = это;» как раз перед вызовом loader.load, а затем используйте область переменной внутри обратного вызова. то есть. scope.mesh.add (head), как внутри обратного вызова, «это» было изменено. – gaitat

ответ

2

Способ загрузки JSONLoader ничего не возвращает. Вместо этого он делает асинхронной вызов данных сервера и возвращает в функцию обратного вызова, так что право использования должно выглядеть следующим образом:

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

Смежные вопросы