Afficher du xml [Résolu]

Messages postés
10
Date d'inscription
jeudi 4 décembre 2008
Statut
Membre
Dernière intervention
30 juillet 2009
- - Dernière réponse : nickydaquick
Messages postés
417
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
- 30 juil. 2009 à 19:38
Voila j'ai un projet carto dans lequel je veux afficher des points par couche.
J'en suis a des test pour l'instant mon panneau de sortie m'affiche bien les infos.
La ou je calle c pour les faire s'afficher sur le swf panne sèche si quelqu'un peux m'aider merci.


voici le XML:
<?xml version="1.0" encoding="utf-8"?>








voici l'AS3:

var cpt:int = 0;
var chargementXML:URLLoader = new URLLoader();// objet de chargement
var urlxml:String; // déclaration de la variable qui va recevoir le chemin du fichier de type String
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; // objet de charmenent de flashvars
//urlxml = paramObj.urlmenu; // affectation de la flashvar (chemin du fichier xml) à la variable urlxml
urlxml = "test.xml";
var fichier:URLRequest = new URLRequest(urlxml);// url du fichier
var intervalDuration:Number = 7000;
/******** ecouteur pour le chargement du fichier XML ************/
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load( fichier );
/************ fonction a éxécuter une fois que le chargement est complet *********/
function chargementComplet(pEvt:Event):void
{
var vig:Array = new Array();// tableau qui contient le chemin des images
var couche:Array = new Array();// tableau qui contient la description
var coordx:Array = new Array();// tableau qui contient le lien
var coordy:Array = new Array();// tableau qui contient les mots
var galery:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Leve
var image:XMLList =galery.elements();
/********** On affecte les variables XML chargées dans un tableau ************/
for each(var noeudimage:XML in image)
{
vig.push(noeudimage.@vig);
couche.push(noeudimage.@couche);
coordx.push(noeudimage.@coordx);
coordy.push(noeudimage.@coordy);
}
var long:int = vig.length -1 ;
for(var i:int = 0; i <= long; i++)
{
trace(vig[0+i]);
trace(coordx[0+i]);
trace(coordy[0+i]);
trace(couche[0+i]);

function chargeimage(evt:MouseEvent,i:int):void
{
var url:String ="vig"+i+".jpg";
var request1:URLRequest = new URLRequest(url);
var loader:Loader = new Loader()
loader.load(request1);
addChild(loader);
}
}//fin du for

}
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
417
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
1
3
Merci
Salut,
voici un exemple de code

//////////////// Classe CustomImage
package
{
    import flash.display.Sprite;
    import flash.display.Loader;
    import flash.xml.XMLNode;
    import flash.net.URLRequest;

    import flash.events.IOErrorEvent;

    public final class CustomImage extends Sprite
    {
         private var __img:Loader;
         
         public function CustomImage(node:XMLNode):void
         {
               var o:Object = node.attributes;
               x = parseInt(String(o.coordx));
               y = parseInt(String(o.coordy));

               __img = new Loader; addChild(__img);
               __img.addEventListener(IOErrorEvent.IO_ERROR,__onPictureNotFound,false,0,true);
               __img.load(new URLRequest(String(o.vig)));
         }
         public function __finalize():Void
         {
               __img.removeEventListener(IOErrorEvent.IO_ERROR,__onPictureNotFound,false);
               __img.unload();
               removeChild(__img); __img = null;
         }

         private function __onPictureNotFound(event:IOErrorEvent):void
         {
               //image non chargee : ressource inexistante
         }

    }
}

///////////////////// Code principal
import flash.xml.XMLDocument;
import flash.xml.XMLNode;
import flash.net.URLLoader;
import flash.net.URLRequest;

import flash.events.Event;
import flash.events.IOErrorEvent;

var urlloader:URLLoader = new URLLoader,
urlxml:String = "test.xml",
imagelist:Vector.<CustomImage> = Vector.<CustomImage>([]);

urlloader.addEventListener(Event.COMPLETE,__onXMLReady,false,0,true);
urlloader.addEventListenr(IOErrorEvent.IO_ERROR,__onXMLError,false,0,true);
urlloader.dataFormat = "text";
urlloader.load(new URLRequest(urlxml));

function __onXMLError(event:IOErrorEvent):void
{
         //notification d'erreur
}

function __onXMLReady(event:Event):void
{
      var xml:XMLDocument = new XMLDocument,
      node:XMLNode,
      cimg:CustomImage;

      xml.ignoreWhite = true;
      try
      {
           xml.parseXML(urlloader.data as String);
      }
      catch(e:Error)
      {
             return;
      }
  
      node = xml.firstChild;
      if(node==null)return;
      while(node.nextSibling!=null)node = node.nextSibling;

      node = node.firstChild;
      while(node!=null)
      {
            cimg = new CustomImage(node);
            adChild(cimg);
            imagelist.push(cimg);
            node = node.nextSibling;
      }
}


J'espere que cela pourra t'aider.

au revoir et Bonne continuation.

http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nickydaquick
Messages postés
417
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
1
3
Merci
Salut,

1- Dans la class CustomImage

package

{

    import flash.display.Graphics;
    import flash.display.Sprite;
    import flash.display.Loader;

    import flash.xml.XMLNode;

    import flash.net.URLRequest;

    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.IOErrorEvent;



    public final class CustomImage extends Sprite
    {
         private var __img:Loader;
         private var __click_zone:Sprite;

         public function CustomImage(node:XMLNode):void
         {
               var o:Object = node.attributes;
               x = parseInt(String(o.coordx));
               y = parseInt(String(o.coordy));

               __img = new Loader; addChild(__img);
               __img.addEventListener(Event.INIT,__onPictureLoaded,false,0,true);
               __img.addEventListener(IOErrorEvent.IO_ERROR,__onPictureNotFound,false,0,true);

               __img.load(new URLRequest(String(o.vig)));

         }

         public function __finalize():Void
         {
               if(__click_zone!=null)
               {
                     __click_zone.removeEventListener(MouseEvent.CLICK,__onClick,false);
               }
               __img.removeEventListener(Event.INIT,__onPictureLoaded,false);
               __img.removeEventListener(IOErrorEvent.IO_ERROR,__onPictureNotFound,false);
               __img.unload();
               removeChild(__img); __img = null;

         }



         private function __onPictureNotFound(event:IOErrorEvent):void
         {
               //image non chargee : ressource inexistante
         }

         private function __onPictureLoaded(event:Event):void
         {
               //image chargee : rendre le clip cliquable

               if(__click_zone!=null)return;
               __click_zone = new Sprite;
               addChild(__click_zone);
               var gp:Graphics = __click_zone.graphics;
               gp.beginFill(0,0.0);
               gp.drawRect(0.0,0.0,__img.width,__img.height);
               gp.endFill();
 
               __click_zone.addEventListener(MouseEvent.CLICK,__onClick,false,0,true);
         }

         private function __onClick(event:MouseEvent):void
         {
                event.stopImmediatePropagation();
               //bouton clique : appliquer une action
         }
    }

}



2- Je l'ai indente moi-meme, mais pour les couleurs, l'editeur de Codes-Cources fait amplement le boulot ; il y a un bouton pour choisir le type de code que tu veux deposer (3eme a partir de la droite dans la petite barre a options au-dessus de la zone de texte). Tu selectionnes le texte et tu choisis, la couleur , la font , le type de code que c'est (Actionscript, c++, java,...).

Bonne continuation.
http://liveplayaz.com
je suis heureux de faire partie d'une grande famille ...!

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nickydaquick
Messages postés
10
Date d'inscription
jeudi 4 décembre 2008
Statut
Membre
Dernière intervention
30 juillet 2009
0
Merci
entre temps je me suis debrouiller avec un scrollpane mais je vais essayer ta méthode car là nouvelle galère comme je suis debutant je vais essayer de t'expliquer le plus clairement possible.
sur ma scene je veux a partir d'un boutons appeller une couche ou un id du xml:


ce boutons va donc m'afficher plusieurs points c la que je galere j'aimerai que ces point une fois charger devienne des boutons.
Le but :
ces point vont apparaitre sur une carto il feront appel a des notice sur une base, l'interet est donc qu'une fois mon travail fini il n'y aura plus besoin de toucher au flash, pour alimenter ma carto seul le xml suffira
Projet un peu ambitieux au vu de mes connaissances AS3 mais bon c en forgeant qu'on devient forgeron et en ce moment la forge tourne a plein regime bref si tu as des idées pour que les points une fois charger soit cliquable je suis preneur
Merci du temps que tu m'a deja consacré
Ps: comment as tu fait pour envoyer un code aussi clair(couleur,retour ligne....)

import idem aux mail précédent
var myxml:XML = new XML();
var cpt:int = 0;
var chargementXML:URLLoader = new URLLoader();// objet de chargement
var urlxml:String; // déclaration de la variable qui va recevoir le chemin du fichier de type String
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; // objet de charmenent de flashvars
//urlxml = paramObj.urlmenu; // affectation de la flashvar (chemin du fichier xml) à la variable urlxml

urlxml = "test.xml";
var fichier:URLRequest = new URLRequest(urlxml);// url du fichier
//var intervalDuration:Number = 7000;
/******** ecouteur pour le chargement du fichier XML ************/
chargementXML.addEventListener( Event.COMPLETE, chargementComplet );
chargementXML.load( fichier );
/************ fonction a éxécuter une fois que le chargement est complet *********/
function chargementComplet(pEvt:Event):void
{
var vig:Array = new Array();// tableau qui contient le chemin des images
var couche:Array = new Array();// tableau qui contient la description
var coordx:Array = new Array();// tableau qui contient le lien
var coordy:Array = new Array();// tableau qui contient les mots
var galery:XML = new XML( pEvt.target.data );//la classe XML est une classe native de Flash, on la trouve dans le package Top Leve
var image:XMLList =galery.elements();
/********** On affecte les variables XML chargées dans un tableau ************/
for each(var noeudimage:XML in image)
{
vig.push(noeudimage.@vig);
couche.push(noeudimage.@couche);
coordx.push(noeudimage.@coordx);
coordy.push(noeudimage.@coordy);
}

var long:int = vig.length -1 ;
for(var i:int = 0; i <= long; i++)
{

trace(vig[0+i]);
trace(coordx[0+i]);
trace(coordy[0+i]);
trace(couche[0+i]);

// création du chargeur
var chargeur:Loader = new Loader();
// url à atteindre
var maRequete:URLRequest = new URLRequest (vig[0+i]);

// chargement du contenu
chargeur.load( maRequete );
// ajout à la liste d'affichage
//addChild ( chargeur );

//Champ texte pour le texte alternatif
var texteAlt:TextField = new TextField();
texteAlt.text = (couche[1]);
texteAlt.x = 200;
texteAlt.y = 500;
texteAlt.width = 400;
texteAlt.height = 200;
this.addChild(texteAlt);

//scrollpane pour afficher xml a l'interieur
var fabe:ScrollPane = new ScrollPane();

var loader:Loader = new Loader()
loader.load(maRequete);
fabe.addChild(chargeur);
fabe.visible = false;
chargeur.x = coordx[0+i];
chargeur.y = coordy[0+i];
chargeur.scaleX=0.4;
chargeur.scaleY=0.4;

fabe.x = 0;
fabe.y = 0;
fabe.width = 1000;
fabe.height = 800;
this.addChild(fabe);


}
}//fin du for
Commenter la réponse de dimassoli