probleme depuis classe document + creation dynamique file

2 views
Skip to first unread message

ben

unread,
Apr 1, 2009, 1:39:17 PM4/1/09
to masapi
Bonjour à tous, et que dire sinon bravo pour ce petit bijoux.

version: Nightly builds (r150);

J'utilise masapi régulièrement mais pas dans une classe document et
j'ai été surpris de voir que mon traffic habituel me lance une erreur
depuis celle-ci:

- je charge d'abord un XML duquel je récupère les urls dans l'array
ImagePath.
puis je déclenche le chargement comme ceci :

private function loadThumbs():void {
var loader:CompositeMassLoader = new CompositeMassLoader
();
loader.massLoader.parallelFiles = 1;
for(i=0;i<imagePath.length;i++);
{
var file:ILoadableFile = loader.addFile(imagePath[i]);
};
loader.addEventListener(Event.OPEN, lOpen);
loader.addEventListener(ProgressEvent.PROGRESS, prog);
loader.addEventListener(MassLoadEvent.FILE_OPEN, onFileOpen);
//loader.addEventListener(MassLoadEvent.FILE_CLOSE,
onFileClose);
//loader.addEventListener(Event.COMPLETE, onComplete);
loader.start();
}

et là, il me donne ceci :
TypeError: Error #1009: Il est impossible d'accéder à la propriété ou
à la méthode d'une référence d'objet nul.
at ch.capi.net::CompositeMassLoader/addFile()
at TicTac/loadThumbs()
at TicTac/EndXMLLoading()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()

Et bon, je vois pas trop pourquoi ? Peut être à cause de la version ?
A tous Merci !

********************************************
Benjamin.
http://www.agence-anonyme;com/blog

Cédric Tabin

unread,
Apr 1, 2009, 2:16:01 PM4/1/09
to mas...@googlegroups.com, benj...@agence-anonyme.com
Hello,

Esssaie de mettre un trace(imagePath[i]) juste avant de faire le addFile pour voir ou ça bloque... visiblement il semblerait qu'un de tes éléments soit null.

@++

ben

unread,
Apr 7, 2009, 8:43:55 AM4/7/09
to masapi
Cédric, comme vu par mail la semaine dernière, j'ai bien corrigé ce
probleme,
mais tu m'avais demandé de te tenir au courant au sujet du problème de
priority que je n'arrive pas à résoudre:

je te passe une image (c'est un preloader type Terminal MS_DOS qui
sera utilisé ;-) ) >> où l'on voit bien le problème, mieux que sur un
trace:
http://www.agence-anonyme.com/lab/captureMASAPI.jpg

je stocke mes variables de chargement depuis XML>>>ok elles sont dans
l'ordre
je les passe à mon compositeMassLoader>>>elles sont encore dans
l'ordre
je trace les files au file_open>>>> les fichiers ne sont plus dans
l'ordre de transmission au composite manager
je trace les les files au file_close >>>> les fichiers sont encore
dans un autre ordre

evidement je perd toute référence à ceux ci puisque je n'ai aucun
moyen d'en trouver la position (je pourrai le faire mais je ne devrai
pas en avoir besoin si je résoud...)
je te passe un résumé de mon code (le reste est de la gestion du site
avec box2D ( physic engine)
et ne pose pas de soucis vis à vis de masapi....) dans le dossier ici:

http://www.agence-anonyme.com/lab/masapi_bug.zip

J'ai cherché dans toute la doc mais je ne vois pas d'où vient le
problème..
la version est toujours celle du svn "nightBuild".

thanks

je place le code (résumé) pour d'autres:

package {
//
public class TicTac extends ApplicationDefault {
//////////////////////////////////////////
// Parameters
//////////////////////////////////////////
private var i:int;
private var count:int=0;
private var count2:int=0;
//%%% XML %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
var XMLPath:String="../xml/content.xml";
var loaderXML:URLLoader;
var dataXML:XML;
var imagePath:Array=new Array ;
var txtTab:Array=new Array ;
//%%% Display %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
private var thumbTab:Array = new Array();
/////
//%%% Physic engine %%%%%%%%%%%%%%%%%%%%%%%
//////////////////////////////////////////
// Constructor
//////////////////////////////////////////
public function TicTac() {
loadXML();
}
//////////////////////////////////////////
// Methods
//////////////////////////////////////////
private function loadXML():void {
txt.appendText("\n>_LOAD XML>");
loaderXML=new URLLoader ;
loaderXML.dataFormat=URLLoaderDataFormat.TEXT;
loaderXML.load(new URLRequest(XMLPath));
loaderXML.addEventListener(Event.COMPLETE,EndXMLLoading);
}

private function EndXMLLoading(e:Event):void {
dataXML=new XML(e.target.data);
var imageList:XMLList=dataXML.IMG;
for each (var nodeImg:XML in imageList.children())
{
imagePath.push(nodeImg.@path.toString());
txt.appendText("\n>_XML>"+nodeImg.@path.toString());

}
txt.appendText("\n>__________XMLDATA_LOADED_______\n>_");
loadThumbs();
}
//////////////////////////////////////////
// Methods
//////////////////////////////////////////
private function loadThumbs():void {
txt.appendText("\n>__________CREATE_MASAPI_______\n>_");
cml = new CompositeMassLoader();
//loader.massLoader.parallelFiles=1;
for(i=0;i<imagePath.length;i++)
{
//var flashPicture:ILoadableFile = lf.create(imagePath
[i]);
//loader.addFile(flashPicture)
cml.addFile(imagePath[i]);
txt.appendText("\n>_ADDTOMASAPI>"+imagePath[i].toUpperCase());
//trace(MultiLoader.determine(imagePath[i]));
}
cml.massLoader.addEventListener(Event.OPEN,lOpen);
cml.massLoader.addEventListener(ProgressEvent.PROGRESS,prog);
cml.massLoader.addEventListener
(MassLoadEvent.FILE_OPEN,onFileOpen);///à chaque ouverture de fichier
cml.massLoader.addEventListener(MassLoadEvent.FILE_CLOSE,
onFileClose);///à chaque fichier fini loadé
cml.massLoader.addEventListener(Event.COMPLETE,onComplete);////tout
fichiers chargés
cml.massLoader.start();

}
///////jusqu'ici tout va bien
///////puis les fichiers ne son pas ouvert dans l'ordre...
private function lOpen(e:Event):void {
txt.appendText("\n>______START_MASSLOADING____");
if (preloader==null)
{
preloader = new Sprite();
preloader.graphics.beginFill(0xFFFFFFFF);
preloader.graphics.drawRect(0,0,80,80);
preloader.graphics.endFill();
addChild(preloader);
preloader.x=SW/2-preloader.width/2;
preloader.mouseEnabled=false;
preloader.y=SH/2-preloader.height/2;
} else
{
addChild(preloader);
preloader.x=SW/2-preloader.width/2;
preloader.y=SH/2-preloader.height/2;
}

}
private function onFileOpen(evt:MassLoadEvent):void {
var fileopen:ILoadableFile=evt.getFile();
txt.appendText("\n>FILE_OPEN_"+fileopen);
}
private function onFileClose(evt:MassLoadEvent):void {
count2++;
var file:ILoadableFile=evt.getFile();
var bmp:Bitmap=file.getData(DataType.BITMAP);
var handler:Sprite=new Sprite ;
handler.addChild(bmp);
handler.addEventListener(MouseEvent.CLICK,displayItem);
thumbTab.push(handler);
txt.appendText("\n>FILE_CLOSE_"+file);
}
private function prog(e:ProgressEvent):void {
var percentfloor:Number=Math.floor(e.target.bytesLoaded/
e.target.bytesTotal*100);
if (percentfloor%5==0)
{
txt.appendText("\n>__"+ percentfloor.toString());
}
}
private function onComplete(e:Event):void {
txt.appendText("\n_\n>>_LOADING COMPLETE");
initPhysic();
}
//////////////////////////////////////////
// Methods
//////////////////////////////////////////

}
}

ben

unread,
Apr 7, 2009, 8:44:58 AM4/7/09
to masapi
euh et ben je sais pas si mon post précédent à été pris en compte...je
regardai dehors...

Cédric Tabin

unread,
Apr 7, 2009, 8:49:23 AM4/7/09
to mas...@googlegroups.com, benj...@agence-anonyme.com
Hello,

Pour que ton message passe directement, il faut t'inscrire au googlegroup :)
Pour ce qui est de ton problème, en fait c'est totalement normal, puisque le CompositeMassLoader utiliser un PriorityMassLoader en arrière-plan. Tu as plusieurs moyen de contourner le problème :
- définir un priorité incrémentale sur tes fichiers
- récupérer l'index de chacun d'eux (dans l'événement MassLoadEvent.FILE_CLOSE tu as la propriété staticIndex / queueIndex)
- définir une propriété via le champs properties de ILoadableFile

Il est vrai que c'est toujours surprenant au début, je vais voir comment je peux faire en sorte que ça marche correctement par défaut !

@++
Cédric Tabin

Cédric Tabin

unread,
Apr 8, 2009, 4:50:06 PM4/8/09
to Benjamin Foucaud, mas...@googlegroups.com
Hello,

Si tu prends la dernière révision du SVN (152), le problème des priorités est réglé :) Ta liste de fichier sera bien chargée dans l'ordre défini au départ (si tu ne donnes pas de priorités) ! Plus besoin du hack montré dans mon mail précédent.

@++
Cédric Tabin

ps. Je ne m'intéresse pas aux donnations :) Par contre n'hésite pas à me remonter les bugs !

2009/4/7 Benjamin Foucaud <benj...@agence-anonyme.com>
en effet ! 
il est vrai que j'avais regardé la méthode createFile au lieu de addFile...oups... j'étais donc passé à côté de la priorité !
et que j'avais viré le parralelfile...

Je crois que maintenant j'arrête les conneries.

Vraiment merci, il y a un endroit où faire une donation ou t'être utile ?




------------------------------------------------------

 Benjamin Foucaud 
Consultant stratégique et créatif.DA 

 L'agence Anonyme 


------------------------------------------------------
 

23 rue Le Mongnier 80090 Amiens








Reply all
Reply to author
Forward
0 new messages