变量变化回调

Variable Change callback

有没有办法在变量改变时声明一个函数?在下面的代码中,我声明了一个名为 loadImage 的函数,它 returns 图像的 material。但是,如果此代码 运行s,mesh 和 scene.add(mesh) 的声明将在图像加载之前 运行s。有没有办法在其他命令运行之前等待变量完成加载?谢谢! ^u^

var geometry = new THREE.BoxGeometry(1,1,1);
var materialimg = new THREE.MeshBasicMaterial();
var materialimg = loadImage("test/map.jpg", manager);
var mesh = new THREE.Mesh(geometry, materialimg);
scene.add(mesh);

作为参考,这里是 LoadImage 函数:

function loadImage(imagePath, loadingManager){
var loader = new THREE.ImageLoader(loadingManager);

//create a texture
var texture = new THREE.Texture();

loader.load(imagePath, function(image){
    texture.image = image;
    texture.needsUpadte = true;
    var material = new THREE.MeshBasicMaterial();
    material.map = texture;

    return material;
});   
} 

这里是调用LoadImage函数的完整函数:

function testImage(){
    var manager = new THREE.LoadingManager();
    manager.onProgress = function(item, loaded, total){
    console.log(item,loaded,total);
    }

    var geometry = new THREE.BoxGeometry(1,1,1);
    var materialimg = new THREE.MeshBasicMaterial();
    var materialimg = loadImage("test/map.jpg", manager);

    var mesh = new THREE.Mesh(geometry, materialimg);
    scene.add(mesh);
}

你应该使用这样的回调函数:

function loadImage(imagePath, loadingManager){
    var loader = new THREE.ImageLoader(loadingManager);

    //create a texture
    var texture = new THREE.Texture();

    loader.load(imagePath, function(image){
        texture.image = image;
        texture.needsUpdate = true;
    });   

    return new THREE.MeshBasicMaterial({ map: texture, overdraw: true });
} 

function testImage(){
    var manager = new THREE.LoadingManager();
    manager.onProgress = function(item, loaded, total){
        console.log(item,loaded,total);
    }

    var geometry = new THREE.BoxGeometry(1,1,1);
    var materialimg = loadImage("test/map.jpg", manager);

    var mesh = new THREE.Mesh(geometry, materialimg);
    scene.add(mesh);
}

编辑:修改以上代码。请注意,您不能在回调函数中使用 return,因为它会在其他上下文中执行。