1.举个例子:在做模型一键复制时,有两个函数。
首先设置一个全局变量 var copy_time = 0;
这里 number 是指模型复制次数(也就是加载函数执行次数)
一是总触发函数:function start(number){
single_model(number)
};
二是复制单个模型函数:function single_model(number){
//此处是复制单个模型的操作...(自行添加)
......
var loader = new THREE.GLTFLoader(); //此处开始每次复制加载模型
loader.load( strPathFile,function ( object ) {
object = object.scene;
//然后对模型进行操作...
.......
copy_time++;
if(copy_time<number)
start();
else if(copy_time==number)
copy_time=0;
});
}
2.以tds模型举例:
正常情况下:
loader.load( strPathFile,function ( object )
{
scene.add( object );
object.position.set(100,100,100)
}
我们改成同步(分三步):
<1>
this.createModel= async function () {
var loader = new THREE.TDSLoader();
var strPathFile = "xxxxxxxxxxxx.3ds";
const group = new THREE.Group()
await this.move(group,strPathFile)
scene.add( group);
}
<2>
async function move(group,strPathFile){
// 加载
const object = await loadPromise(strPathFile);
//移动操作
object.position.set(100,100,100);
group=object;
}
<3>
// 返回Promise的TDSLoader
function loadPromise(path) {
var loader = new THREE.TDSLoader();
return new Promise((resolve, reject) =>{
loader.load(path, object => {
resolve(object)
})
})
}