Javascript 变量更改回调

Javascript 变量更改回调,javascript,three.js,Javascript,Three.js,当变量发生变化时,有没有方法声明函数?在下面的代码中,我声明了一个名为loadImage的函数,该函数返回图像的材质。但是,如果此代码运行,则会在加载图像之前运行mesh和scene.add(mesh)的声明。是否有办法在运行其他命令之前等待变量完成加载?谢谢^u^ var geometry = new THREE.BoxGeometry(1,1,1); var materialimg = new THREE.MeshBasicMaterial(); var materialimg = load

当变量发生变化时,有没有方法声明函数?在下面的代码中,我声明了一个名为loadImage的函数,该函数返回图像的材质。但是,如果此代码运行,则会在加载图像之前运行mesh和scene.add(mesh)的声明。是否有办法在运行其他命令之前等待变量完成加载?谢谢^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
,因为它将在其他上下文中执行。

我们是否应该将回调作为参数声明loadImage函数?此外,我将“materialimg”赋值给LoadImage返回的值,如何执行此操作?为什么要返回
materialimg
?上面的代码应该与您的代码完全相同。代码刚刚移动到回调函数中。对于您的问题,除了使用回调之外,我不知道其他方法。我使LoadImage成为一个函数,返回加载文件名的材料,并将其分配给materialimg。然后,我将使用几何体和材质形成网格。我知道我需要使用回调,但我不确定如何使用。我已经更新了问题,以便让事情变得清楚。谢谢你愿意帮忙!没问题;-)当我解决你的问题时,我想要声誉积分:D