0
我正在嘗試創建一個簡單的three.js應用程序,但我陷入了一些javascript的細微差別。我真的不知道該怎麼沒有一個例子來說明這個問題:函數調用後Javascript成員未更新
var Model = function() {
THREE.Object3D.call(this);
this.loadedMesh = null;
this.meshIsLoaded = false;
};
Model.prototype = {
constructor: Model,
load: function(path, mtlName, objName) {
var onProgress = function(xhr) {...};
var onError = function(err) {...};
THREE.Loader.Handlers.add(/\.dds$/i, new THREE.DDSLoader());
mtlLoader.setPath(path);
mtlLoader.load(mtlName, function(materials) {
materials.preload();
objLoader.setMaterials(materials);
objLoader.setPath(path);
objLoader.load(objName, function(object) {
object.position.set(0, -5, 10);
object.scale.set(5, 5, 5);
object.rotation.y = Math.PI; // 180 degrees
scene.add(object);
this.loadedMesh = object;
this.meshIsLoaded = true;
});
}, onProgress, onError);
}
};
此包裝應該是三個模型的容器。加載工作正常,但是當我嘗試將模型保存到變量中時,沒有任何內部成員在模型範圍外被更改。
var spaceman = new Model();
spaceman.load("ACES/", "acesjustforroomshow.mtl", "acesjustforroomshow.obj");
...
function update() {
if (spaceman.meshIsLoaded)
spaceman.loadedMesh.rotation.x += 0.1;
}
這很奇怪,因爲如果我調試應用程序,並等待模型加載,我可以將鼠標懸停在內部成員,他們被填充。當我將鼠標懸停在太空人對象上時,loadedMesh和meshIsLoaded的值仍然是默認值。
是否有原型的某些方面,我不理解這裏?
真棒!這正是問題所在。我用臨時'那個'可變方法去了。 – RomanLarionov