MassLoader - problème dans l'ordre de chargement des fichiers

1 view
Skip to first unread message

flypix

unread,
Dec 10, 2008, 10:40:16 AM12/10/08
to masapi
Bonjour,

Je débarque dans ce groupe (et aussi dans google group en général).
J'ai vu que la langue est l'anglais mais qu'on pouvait poster des
messages en français.
Aussi c'est en français que je vous adresse ce 1er sujet. Dites-moi si
je dois le rédiger en anglais.

Dans cet exemple, J'utilise le compositeMassLoader pour charger des
images (5 images jpg).
Je rencontre 2 problèmes:
- L'ordre dans lequel sont chargés les fichiers n'est pas celui dans
lequel ils ont étés ajoutés via addFile().
- L'accés à la propriété alwaysDispatchProgressEvent du massloader
renvoit une erreur,
comme si elle n'était pas définie. (Je souhaite la fixer à true).

Voici le code, j'ai ajouté une bonne série de traces pour mieux
comprendre ce qui se passait.

DEBUT DU CODE // CODE START

import ch.capi.net.*;
import ch.capi.events.*;

// Start build progressBar
var itemprogbg:Shape = createBar(0x333333, .3, 10, 300);
addChild(itemprogbg);
itemprogbg.width = 150;

var itemprog:Shape = createBar(0x333333, 1, 10, 300);
addChild(itemprog);

var queueprogbg:Shape = createBar(0x333333, .3, 10, 350);
addChild(queueprogbg);
queueprogbg.width = 150;

var queueprog:Shape = createBar(0x333333, 1, 10, 350);
addChild(queueprog);
// End build progressBar

//creates the images main container
var imagesContainer : MovieClip = new MovieClip();
addChild(imagesContainer);
imagesContainer.x = imagesContainer.y = 25;

//creates the MassLoader
var cml:CompositeMassLoader = new CompositeMassLoader();
var ml:IMassLoader = cml.massLoader;
ml.parallelFiles = 1;
trace("ml.parallelFiles: " + ml.parallelFiles);
//trace(ml.alwaysDispatchProgressEvent); // Error: undefined
property !?

//creates & add the files to the MassLoader
cml.addFile("images/001_01.jpg"); // will use a URLLoader object with
the URLLoaderDataFormat.BINARY property
cml.addFile("images/001_02.jpg"); // will use a URLLoader object with
the URLLoaderDataFormat.BINARY property
cml.addFile("images/001_03.jpg"); // will use a URLLoader object with
the URLLoaderDataFormat.BINARY property
cml.addFile("images/001_04.jpg"); // will use a URLLoader object with
the URLLoaderDataFormat.BINARY property
cml.addFile("images/001_05.jpg"); // will use a URLLoader object with
the URLLoaderDataFormat.BINARY property
//
ml.addEventListener(ProgressEvent.PROGRESS, onOverallProgress); //
overall progression
ml.addEventListener(MassLoadEvent.FILE_OPEN, onOpenHandler); //a file
download starts
ml.addEventListener(MassLoadEvent.FILE_CLOSE, onCloseHandler); //a
file download ends
ml.addEventListener(Event.COMPLETE, completeHandler); //massload
complete

//listen to the overall progression
function onOverallProgress(evt:ProgressEvent):void
{
var info:ILoadInfo = evt.target.loadInfo;
//var info:ILoadInfo = cml.loadInfo;
trace("Queue Loaded at "+info.percentLoaded+"%");
queue_txt.text = "Queue loaded at: " + info.percentLoaded + "%";
queueprog.width = 150 * info.ratioLoaded;
trace
("--------------------------------------------------------------------------------");
}

//listen when a file begins to be loaded
function onOpenHandler(evt:MassLoadEvent):void
{
var file:ILoadableFile = evt.file as ILoadableFile;
trace("file open >>> file: " + evt.file);
trace("file open >>> priority: " + evt.priority);
trace("file open >>> staticIndex: " + evt.staticIndex);
trace("file open >>> queueIndex: " + evt.queueIndex);
trace
("--------------------------------------------------------------------------------");
file.addEventListener(ProgressEvent.PROGRESS, onFileProgress);
}

//listen to a specific file
function onFileProgress(evt:ProgressEvent):void
{
var percent:Number = Math.round(evt.bytesLoaded / evt.bytesTotal *
100);
trace("file progress >>> target: " + evt.target);
trace("file progress >>> percent: " + percent);
itemprog.width = 150 * (percent/100);
item_txt.text = "Item " + evt.target + " loaded at: " + percent +
"%";
}
//listen when a file ends to be loaded
function onCloseHandler(evt:MassLoadEvent):void {
trace("file close >>> file: " + evt.file);
trace("file close >>> target: " + evt.target);
trace("file close >>> staticIndex: " + evt.staticIndex);
trace("file close >>> queueIndex: " + evt.queueIndex);
trace("file close >>> cml.getFileAt(evt.staticIndex): " +
cml.getFileAt(evt.staticIndex));
trace("file close >>> cml.getFileAt(evt.queueIndex): " + cml.getFileAt
(evt.queueIndex));
trace
("--------------------------------------------------------------------------------");
var file:ILoadableFile = evt.file as ILoadableFile;
var _loader:Loader = file.getData("flash.display.Loader");
// imgBox container: may contain an animated preloader, a textfield,
etc...
var imgBox:Sprite = new Sprite();
imgBox.x = evt.staticIndex * 150;
imgBox.scaleX = imgBox.scaleY = 0.2;
imgBox.addChild(_loader);
imagesContainer.addChild(imgBox);
/*
file.removeEventListener(ProgressEvent.PROGRESS, onFileProgress);
file = null;
*/
}

//listen to the complete event
function completeHandler(evt:Event):void
{
trace("MassLoad complete");
}

//starts the loading
cml.start();


//useful information for debugging
//trace(cml.massLoader);
trace(ml);
trace
("--------------------------------------------------------------------------------");


function createBar(color:uint, alpha:Number, x:int, y:int):Shape {
var s:Shape = new Shape();
s.graphics.beginFill(color, alpha);
s.graphics.drawRect(0, 0, 1, 2);
s.graphics.endFill();
s.x = x;
s.y = y;
return s;
}

FIN DU CODE // CODE END

- Première question :
On voit bien dans la fenetre de sortie que les fichiers sont chargés
dans cet ordre : 0, 4, 3, 2, 1 au lieu de 0, 1, 2, 3, 4.
Pourquoi je n'obtiens pas le comportement par défaut (chargement dans
l'ordre d'ajout des addFile) ?
- Deuxième question :
Pourquoi je ne parviens pas à accéder à la propriété
alwaysDispatchProgressEvent du massloader ?

J'ai pas mal cherché dans la doc, mais je n'ai plus d'idée.
J'aimerais bien vous joindre les fichiers, mais je ne trouve pas ou ça
se passe. Est-il possible de le faire ?
Merci pour l'aide que vous pourrez m'apporter.

Cédric Tabin

unread,
Dec 10, 2008, 3:34:31 PM12/10/08
to mas...@googlegroups.com
Salut et bienvenue :)

Déjà, est-ce que tu utilises la version SVN ou la version en download sur le site ? Sauf erreur, la version SVN utilise un PriorityMassLoader en arrière-plan pour charger les fichiers, ce qui fait que les fichiers ne sont pas chargés dans l'ordre. Pour cela, il faut passer manuellement un MassLoader au CompositeMassLoader :

var cml:CompositeMassLoader = new CompositeMassLoader(true, new MassLoader());

pour ce qui est du alwaysDispatchProgressEvent, il faut cibler correctement le massLoader :

var ml:MassLoader = cml.massLoader as MassLoader;

@++

2008/12/10 flypix <fly...@gmail.com>

flypix

unread,
Dec 11, 2008, 9:39:56 AM12/11/08
to masapi
Merci pour l'accueil :)
J'utilise la version r127 du SVN.

Quoi dire d'autre que merci. T'as mis le doigt sur mes 2 erreurs, pile
poil.
Ca fonctionne parfaitement maintenant. Super taf.

En fait, je croyais à tort que le CompositeMassLoader disposait déja
d'un objet MassLoader.
J'avais aussi fait une boulette sur le type de ma variable
ml:IMassLoader.
Comme tu le vois, je ne suis pas une brute de POO et les choses sont
un peu confuses pour moi.
Je vais continuer à creuser tout ça.

Encore merci.
a+

On 10 déc, 21:34, "Cédric Tabin" <tabin.ced...@gmail.com> wrote:
> Salut et bienvenue :)
>
> Déjà, est-ce que tu utilises la version SVN ou la version en download sur le
> site ? Sauf erreur, la version SVN utilise un PriorityMassLoader en
> arrière-plan pour charger les fichiers, ce qui fait que les fichiers ne sont
> pas chargés dans l'ordre. Pour cela, il faut passer manuellement un
> MassLoader au CompositeMassLoader :
>
> var cml:CompositeMassLoader = new CompositeMassLoader(true, new
> MassLoader());
>
> pour ce qui est du alwaysDispatchProgressEvent, il faut cibler correctement
> le massLoader :
>
> var ml:MassLoader = cml.massLoader as MassLoader;
>
> @++
>
> 2008/12/10 flypix <flyp...@gmail.com>
> > ("------------------------------------------------------------------------- -------");
> > }
>
> > //listen when a file begins to be loaded
> > function onOpenHandler(evt:MassLoadEvent):void
> > {
> >        var file:ILoadableFile = evt.file as ILoadableFile;
> >        trace("file open >>> file: " + evt.file);
> >        trace("file open >>> priority: " + evt.priority);
> >        trace("file open >>> staticIndex: " + evt.staticIndex);
> >        trace("file open >>> queueIndex: " + evt.queueIndex);
> >        trace
>
> > ("------------------------------------------------------------------------- -------");
> >        file.addEventListener(ProgressEvent.PROGRESS, onFileProgress);
> > }
>
> > //listen to a specific file
> > function onFileProgress(evt:ProgressEvent):void
> > {
> >        var percent:Number = Math.round(evt.bytesLoaded / evt.bytesTotal *
> > 100);
> >        trace("file progress >>> target: " + evt.target);
> >        trace("file progress >>> percent: " + percent);
> >        itemprog.width = 150 * (percent/100);
> >        item_txt.text = "Item " + evt.target + " loaded at: " + percent +
> > "%";
> > }
> > //listen when a file ends to be loaded
> > function onCloseHandler(evt:MassLoadEvent):void {
> >        trace("file close >>> file: " + evt.file);
> >        trace("file close >>> target: " + evt.target);
> >        trace("file close >>> staticIndex: " + evt.staticIndex);
> >        trace("file close >>> queueIndex: " + evt.queueIndex);
> >        trace("file close >>> cml.getFileAt(evt.staticIndex): " +
> > cml.getFileAt(evt.staticIndex));
> >        trace("file close >>> cml.getFileAt(evt.queueIndex): " +
> > cml.getFileAt
> > (evt.queueIndex));
> >        trace
>
> > ("------------------------------------------------------------------------- -------");
> >        var file:ILoadableFile = evt.file as ILoadableFile;
> >        var _loader:Loader = file.getData("flash.display.Loader");
> >        // imgBox container: may contain an animated preloader, a textfield,
> > etc...
> >        var imgBox:Sprite = new Sprite();
> >        imgBox.x = evt.staticIndex * 150;
> >        imgBox.scaleX = imgBox.scaleY = 0.2;
> >        imgBox.addChild(_loader);
> >        imagesContainer.addChild(imgBox);
> >        /*
> >        file.removeEventListener(ProgressEvent.PROGRESS, onFileProgress);
> >        file = null;
> >        */
> > }
>
> > //listen to the complete event
> > function completeHandler(evt:Event):void
> > {
> >    trace("MassLoad complete");
> > }
>
> > //starts the loading
> > cml.start();
>
> > //useful information for debugging
> > //trace(cml.massLoader);
> > trace(ml);
> > trace
>
> > ("------------------------------------------------------------------------- -------");
Reply all
Reply to author
Forward
0 new messages