是的,你可以做到这一点。 首先,你应该开始按你想要显示的顺序加载纹理。在你的情况下,你需要改变你的循环,首先加载在球体中间的纹理。
var materials = new Array(geo_height*geo_width);
// loading middle part of textures
for(var y = yFrom; y < yTo; y++){
for(var x = xFrom; x < xTo; x++){
materials[y * geo_width + x] = loadTexture('getImage.php?x=' + x + '&y=' + y + '&zoom=2&type=' + type);
}
}
// loading other textures
for(var y = 0; y < geo_height; y++){
for(var x = 0; x < geo_width; x++){
if (materials[y * geo_width + x] == undefined)
materials[y * geo_width + x] = loadTexture('getImage.php?x=' + x + '&y=' + y + '&zoom=2&type=' + type);
}
}
有时,如果您想确保某些纹理加载到其他纹理之前,您可以使用加载回调函数同步它们。为此,使用Imageutils.loadTexture(url,mapping,onLoad,onError)。例如,通过打包加载纹理:
function loadTexturesPack(texturesPack, cb) {
var count = 0,
textures = [],
onLoad = function() {
count++;
if (count == texturesPack.length)
cb(textures);
};
for (var i = 0; i < texturesPack.length; i++) {
textures.push(Imageutils.loadTexture(texturesPack.url, null, onLoad));
}
}
function loadPacks(packs) {
var i = 0;
onLoad = function(textures) {
i++;
// do something with loaded textures
// ...
// load next texture pack
if (i < packs.length) {
loadTexturesPack(pack[i]);
}
};
loadTexturesPack(pack[0]);
}