Forums Développement Multimédia

Aller au contenu

Problème de chargement de fichiers externes

CODE Actionscript

3 réponses à ce sujet

#1 AnnJosephine

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 20 January 2014 - 17:50 PM

Bonjour !

Je réalise actuellement ma première application AIR avec Flash et suis bloquée depuis plusieurs jours face à un bug que je n'arrive pas à comprendre...

Tout d'abord, le principe de l'appli n'est pas bien compliqué : il s'agit de faire communiquer deux écrans en fonction des actions de l'utilisateur. Le premier écran est interactif, le second est simplement un écran d'affichage (j'y importe un swf).
Sur le premier écran, il y a une carte de Paris avec plusieurs points que l'utilisateur peut cliquer. Au clic, la partie droite du premier écran affiche une série d'informations (textes et images) sur le lieu et l'écran deux affiche des photos du lieux (contenues dans le swf).
La liste des lieux et des informations correspondantes est récupérée via un fichier XML.

Quand je teste l'application dans flash tout fonctionne sans soucis mais quand j'exécute le fichier .air publié via flash, plus rien ne fonctionne. L'application ne se lance pas je suis bloquée à la frame 0.

J'ai donc cherché d'où pouvez venir ce bug en supprimant les fonctions de mon script au fur et à mesure. Il apparait que quand je supprime les fonctions d'import du XML et des images l'application fonctionne... Alors j'ai retourné le problème dans tous les sens, modifié 25 fois mes fonctions d'import rien n'y fait.
J'ai réussi à créer une fonction pour les images qui ne plante pas l'appli mais les images ne s'affichent pas dans l'application... Quant au XML aucun moyen de le faire fonctionner.

Voici le code pour l'import des images :


function chargerImagesMarge(){
var dir:String = "img/petit/A/m28_dumartagnan_p_1_";
var dest:Object = ecran_carte.marge.images.img_1;
var nbImg:int = 15;
chargerImages(dest,nbImg,dir);
}

function chargerImages(dest:Object,nbImg:int,dir:String){
  var nbImagesChargees:int = 0;
  for (var noImage:int=1; noImage<=nbImg; noImage++){
   var conteneurImage:Loader = new Loader();
   conteneurImage.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
   var imgsrc:File = File.applicationDirectory.resolvePath(dir + noImage.toString() + ".JPG");
   conteneurImage.load(new URLRequest(imgsrc.url));
   conteneurImage.name = "img_" + noImage;
   conteneurImage.x = 0;
   conteneurImage.y = 0;  
 
   function onComplete(evt:Event) {
    nbImagesChargees++;
    conteneurImage.contentLoaderInfo.removeEventListener(Event.COMPLETE, onComplete);
    dest.addChild(conteneurImage);
   }
  }
}
 

Et voici le code pour le chargement du XML qui lui plante complètement :

function XML_Loading():void {
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest(xml_path));

}
function LoadXML(e:Event):void {
//Extract data
xmlData = XML(xmlLoader.data);
ParseData(xmlData);
}
function ParseData(dat:XML):void {
//Nombre de lieux
nbPointsCartes = dat.paris.lieu.length();

for (var i:uint = 0; i < nbPointsCartes; i++)
{
  maListeNomsLieux[i] = dat.paris.lieu.nom.text()[i];
  maListeCitations[i] = dat.paris.lieu.citation.text()[i];
  maListeLegendes[i] = [dat.paris.lieu.legende1.attributes()[i],dat.paris.lieu.legende2.attributes()[i],dat.paris.lieu.legende3.attributes()[i]];
  maListeCommentaires[i] = dat.paris.lieu.commentaire.text()[i];
}

initBorne();
}
 

Voilà, je suis bien perdue alors si vous avez des idées ou des suggestions, je suis preneuse !

Cordialement,

#2 Tonic

    Plop

  • Moderateur
  • PipPipPipPipPipPipPipPip
  • 5712 messages

Posté 21 January 2014 - 11:39 AM

Salut,

peux tu tracer dans un TextInput par exemple (vu que tu ne seras pas en debug lors du déploiement) les urls que tu tentes de charger ?

++ ^^

#3 AnnJosephine

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 21 January 2014 - 14:34 PM

Bonjour,

J'ai eu la même idée que toi en me replongeant dans le problème ce matin !

J'obtiens l'url suivante : app:/img/petit/A/m28_dumartagnan_p_1_1.JPG
Je me suis dis qu'il devait y avoir un problème de ciblage du fichier, puisque l'arborescence est juste...
Le dossier app:/ ne doit pas être celui que je crois (c'est à dire celui présent dans le dossier "applications")

J'ai donc décidé de suivre le chargement du fichier pour en avoir le coeur net avec le code suivant (dans la fonction chargerImages) :

conteneurImage.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onError);

function onError(evt:Event){
    textetest.text="Erreur de chargement de l'image : "+noImage;
   }
 

et là j'ai eu des erreurs en pagaille ^^

Alors j'ai tenté de remplacer
var imgsrc:File = File.applicationDirectory.resolvePath(dir + noImage.toString() + ".JPG");
par
var imgsrc:File = File.applicationStorageDirectory.resolvePath(dir + noImage.toString() + ".JPG");
Sans succès... Même erreur !

La solution que je pense avoir trouvé pour l'instant est de remplacer
var imgsrc:File = File.applicationDirectory.resolvePath(dir + noImage.toString() + ".JPG");
par
var imgsrc:File = File.desktopDirectory.resolvePath(dir + noImage.toString() + ".JPG");
ca fonctionne pour les images !


L'application étant exécutée sur un poste dédié, je peux sans souci stocker les médias (images, xml etc...) sur le bureau !

J'espère que cette solution résoudra aussi le problème de chargement du XML, je vous tiens au courant en tout cas.

Merci pour ta réponse en tout cas ;)

#4 AnnJosephine

    Ceinture Blanche

  • Members
  • Pip
  • 3 messages

Posté 21 January 2014 - 16:51 PM

Problème résolu !
C'était bien un soucis d'adressage de fichier.

L'application tourne d'enfer, sujet résolu !



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP