Le projet était très simple : charger une liste d'images selon la catégorie choisie (qui est un bouton). Le but est donc de faire stopper le Massive Loading lorsque l'utilisateur clique sur une autre catégorie.

import ch.capi.net.*;
 
var cat1:Array = ["img1.jpg", "img2.jpg", "img3.jpg"];
var cat2:Array = ["img4.jpg", "img5.jpg", "img6.jpg"];
var ml:MassLoader = new MassLoader(1); //chargement séquentiel
var fc:LoadableFileFactory = new LoadableFileFactory();
 
function loadCategory(cat:Array):void
{
   if (ml.stateLoading) ml.stop(); //peut provoquer un souci quelquefois !
 
   for (var i:int=0 ; i<cat.length ; i++)
   {
       var il:ILoadableFile = fc.create(cat[i]);
       ml.addFile(il);
   }
 
   ml.start();
}
 
//...

Je me suis demandé si le bug ne venait pas de mon API, mais après investigation il semblerait que ce soit la méthode close de Loader qui pose problème... En effet, l'appel à cette méthode provoque une erreur dans le cas où l'état est le suivant :

  • Le chargement a été lancé.
  • L'événement Event.OPEN a été envoyé.
  • L'événement Event.COMPLETE n'a pas été envoyé.
  • Les propriétés bytesLoaded et bytesTotal sont égales.

A partir de là, il est simple de solutionner le problème : si ldr.bytesLoaded == ldr.bytesTotal, alors l'appel à la méthode close n'est pas fait car l'événement Event.COMPLETE devrait surgir d'une milliseconde à l'autre :)

C'est un souci qui m'avait complètement échappé lors des phases RC de masapi, ce qui est désormais corrigé dans la dernière version (1.1) !