AS2 MovieClipLoader — изображения из XML. Как пропустить загрузку изображения, если оно не существует?

#xml #actionscript-2 #moviecliploader

#xml #actionscript-2 #moviecliploader

Вопрос:

Я пытаюсь создать эскизы-сетку на основе XML. До сих пор я делал код для загрузки и размещения эскизов на сцене. Код, который я использую:

 function loadXML(loaded) {
  if (loaded) {
    xmlNode = this.firstChild;
    imgName = [];
    image = [];
    description = [];
    thumbnails = [];
    url = [];
    _global.total = xmlNode.childNodes.length;
    for (i=0; i<_global.total; i  ) {
       imgName[i] = xmlNode.childNodes[i].attributes.image_name;
       image[i] = xmlNode.childNodes[i].attributes.path;
       description[i] = xmlNode.childNodes[i].attributes.details;
       thumbnails[i] = xmlNode.childNodes[i].attributes.path   "tn_"   xmlNode.childNodes[i].attributes.image_name;
       url[i] ="#"  xmlNode.childNodes[i].attributes.path   xmlNode.childNodes[i].attributes.image_name;
       thumbnailer(i);
     }
   } else {
     trace("file not loaded!");
   }
}

xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad =loadXML;
xmlData.load("myImages.xml");

function thumbnailer(k){
   loaded_counter=0;
   total_thumbs = _global.total;
   var container = thumbnail_mc.createEmptyMovieClip("th" k,thumbnail_mc.getNextHighestDepth());
   var image = container.createEmptyMovieClip("img", container.getNextHighestDepth());

   tlistener = new Object();
   tlistener.onLoadInit = function(target_mc) { 
      target_mc.onRelease = function() {
          getURL (url[k], "_self");
      };
      target_mc.onRollOver = function() {
          target_mc._alpha=50;
      };
      target_mc.onRollOut = target_mc.onDragOut = function(){
          target_mc._alpha=100;
      };
      loaded_counter  ;
      if(loaded_counter==total_thumbs){
          build_grid();
      }  
   };
   image_mcl = new MovieClipLoader();
   image_mcl.addListener(tlistener);
   image_mcl.loadClip(thumbnails[k], "thumbnail_mc.th" k ".img");
}
  

Теперь, когда некоторые эскизы отсутствуют в папке, код застревает в строке: loaded_counter==total_thumbs , и материал для позиционирования ( build_grid() ) не может быть запущен.

У кого-нибудь есть идея, как пропустить отсутствующие эскизы?

Спасибо за любую помощь, Артур.

Комментарии:

1. Это безумие… Я не понимаю, как люди делают плавное позиционирование изображения в сетке с помощью MovieClipLoader. Когда я пытаюсь расположить изображения, не дожидаясь, когда все эскизы будут полностью загружены, затем при выполнении позиционирования, когда мышь находится в режиме прокрутки (масштабирование моих больших пальцев до 120%), мои изображения большого пальца перемещаются в другое положение, чем они должны быть : ( 🙁 . Как отключить события мыши при выполнении позиционирования и включить, когда процесс позиционирования завершен??

Ответ №1:

Вы должны добавить :

 tlistener.onLoadError = function() {
  loaded_counter  ;
  if(loaded_counter==total_thumbs){
      build_grid();
  }  
}
  

И я думаю, вам следует протестировать :

 if (loaded_counter >= total_thumbs)
  

Вы никогда не знаете…