我在javascript上为WebGL制作了.obj模型的加载器,而我似乎已经遇到了XMLHttpRequest方法的问题,让我解释一下;
var textureArray=[];
loadTexture=function(name){
var request = new XMLHttpRequest();
request.open("GET", name+'.mtl');
request.onreadystatechange = function () {
if (request.readyState == 4) {
//do the stuff to put the textures in textureArray
}
}
request.send();
}
让我们说使用它的方法就是:
loadObjModel=function(name){
loadTexture(name);
//Check if the texture loaded
}
问题是,当我说“检查纹理是否已加载”时,变量“textureArray”它是空的,但是如果我在“执行将纹理放入textureArray中之后立即检查”(在onreadystatechange函数内)它确实显示正确加载的纹理。 我发现问题是什么,它需要时间来读取文件并循环通过线,所以此刻我“检查纹理是否加载”它还没有完成,但是当我在结束时“做”将纹理放在textureArray中的东西“播放它正确加载,因为它必须等待加载所有内容然后显示textureArray的内容。
这里的一个大问题是,当我尝试使用我在“检查纹理是否加载”时加载的纹理,我不能......因为它们不在那里,我看到了webGL加载器以这种方式,没有那个问题。 扫管笏,我可能是错的吗?,谢谢你的想法:)
答案 0 :(得分:-1)
当您调用open方法时,可以通过添加 false 来使ajax调用同步:
request.open("GET", name+'.mtl', false);
这应该让你的脚本等到loadTexture()返回之前再做'检查纹理是否加载'的东西。