是的,你可以这样做。首先,您应该按照要显示它们的顺序开始加载纹理。在您的情况下,您需要更改循环,以首先加载球体中间的纹理。
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]);
}