Otakumaster
Messages postés3Date d'inscriptionvendredi 19 décembre 2008StatutMembreDernière intervention16 mai 2012
-
14 avril 2009 à 17:33
Otakumaster
Messages postés3Date d'inscriptionvendredi 19 décembre 2008StatutMembreDernière intervention16 mai 2012
-
16 avril 2009 à 14:11
Bonjour,
cela fait 3 jours que j'essaye d'afficher les données d'un xml dans Flash en AS3,
voici le XML en question:
et mon actionscript que j'ai mis dans mon anim fla:
fscommand("fullscreen", "true");
stop();
// nous importons les classes necessaires :
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
// nous déclarons un objet URLLoader :
var chargeur:URLLoader = new URLLoader ();
// nous crééons un objet URLRequest qui contient l'url du fichier :
var adresse:URLRequest = new URLRequest ("data.xml");
// nous définissons le format du fichier chargé :
var format = URLLoaderDataFormat.XML;
chargeur.dataFormat = format;
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
chargeur.load(adresse);
// définition des évenements de l'objet chargeur
chargeur.addEventListener(Event.COMPLETE, finDuChargement);
chargeur.addEventListener(ProgressEvent.PROGRESS, avancement);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);
// définition de la fonction éxecutée par l'évenement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
var clients:XML = new XML(event.target.data);
for each (var property:XML in clients.client){
var myText:TextField = new TextField();
myText.y = 110;
myText.x = 50;
myText.width = 200;
myText.height = 200;
myText.text = (property[0].@["nom"]);
addChild(myText);
}
// définition de la fonction éxecutée par l'évenement PROGRESS :
// déclenchée à chaque avancement du chargement )
function avancement( event:Event) {
trace(event.bytesLoaded+" chargés sur "+event.bytesTotal);
}
// fonction indiquant si une erreur de chargmement survient :
function indiquerErreur( event:Event ) {
trace(event);
}
Le but est d'afficher chaque nom d'entreprise dans un clip, ainsi que son logo.
J'ai ici tenté d'afficher juste les noms mais ça ne fonctionne pas et je pense avoir fait
tous les tutos trouvables avec Google, sans y arriver...
Je remercie d'avance les bonnes âmes qui pourront me donner un coup de main.
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 14 avril 2009 à 17:55
Bonjour,
"property[0].@["nom"]" n'est pas de l'e4x correcte.
Si tu cherches à ressortir l'attribut "nom", il faut écrire : property[0].@nom;
Ensuite, je te conseille de passer par un XMLList et de récupérer la longueur de celui-ci pour faire une boucle "for" dessus, au lieu d'un "for each" dont tu ne maîtrises pas le résultat.
nickydaquick
Messages postés416Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention19 décembre 20133 15 avril 2009 à 22:13
Salut,
tout est correct jusqu'ici sauf que je ne vois pas la fonction finDuChargement que j'ecrirais comme suit:
function finDuChargement(event:Event):void
{
var urlloader:URLLoader = event.target as URLLoader;
urlloader.removeEventListener(Event.COMPLETE,finDuChargement);
urlloader.removeEventListener(ProgressEvent.PROGRESS,finDuChargement);
urlloader.removeEventListener(IOErrorEvent.IO_ERROR,finDuChargement);
var reponse:String = urlloader.data as String;
var xml:XMLDocument = new XMLDocument;
xml.ignoreWhite = true;
xml.parseXML(reponse);
var node:XMLNode = xml.firstChild;
if(node==null)return;
while(node.nextSibling!=null)node = node.nextSibling;
//a ce stade-ci en theorie tu as node.nodeName = racine
node = node.firstChild;// premier noeud client var field:TextField null, y:Number 0.0;
while(node!=null)
{
field = new TextField;
field.autoSize = "left";
field.text = String(node.attributes.nom);
field.x = 50.0;
field.y = y;
y += field.height + 2.0;
addChild(field);
node = node.nextSibling;
}
field = null;
node = null;
xml = null;
}
Otakumaster
Messages postés3Date d'inscriptionvendredi 19 décembre 2008StatutMembreDernière intervention16 mai 2012 16 avril 2009 à 14:11
Je vous remercie pour votre aide, je suis finalement parvenu à un code fonctionnel, que voici si cela peut aider quelqu'un.
Pour résumer:
1 - je charge un PHP qui génère (ou met à jour) un XML à partir d'une base MySQL
2 - je lis les données du XML
3 - j'affiche les images grâce aux liens du XML
stop();
// nous importons les classes necessaires :
import flash.events.IOErrorEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.events.ProgressEvent;
// nous déclarons un objet URLLoader :
var PHPloader:URLLoader = new URLLoader ();
// nous créons un objet URLRequest qui contient l'url du fichier :
var PHPadresse:URLRequest = new URLRequest ("loader.php");
PHPadresse.method = URLRequestMethod.POST;
// nous définissons le format du fichier chargé :
var PHPformat = URLLoaderDataFormat.BINARY;
PHPloader.dataFormat = PHPformat;
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
PHPloader.load(PHPadresse);
// nous déclarons un objet URLLoader :
var chargeur:URLLoader = new URLLoader ();
// nous créons un objet URLRequest qui contient l'url du fichier :
var adresse:URLRequest = new URLRequest ("data.xml");
// nous définissons le format du fichier chargé :
var format = URLLoaderDataFormat.TEXT;
chargeur.dataFormat = format;
// nous lançons le chargement du fichier, en indiquant l'adresse de celui ci par l'objet URLRequest :
chargeur.load(adresse);
// définition des évenements de l'objet chargeur
chargeur.addEventListener(Event.COMPLETE, finDuChargement);
chargeur.addEventListener(IOErrorEvent.IO_ERROR, indiquerErreur);
// définition de la fonction exécutée par l'évenement COMPLETE :
// ( déclenchée lorsque le chargement se termine )
function finDuChargement ( event:Event ) {
var contenu:XML = new XML(event.target.data);
var mon_y = 115;
var mon_x = 53;
var decal = 0;
var results:XMLList = contenu.client;
var i = 0;
var j = 0;
for each (var item:XML in results) {
trace("i: "+i);
trace("j: "+j);
var myLoader:Loader = new Loader();
myLoader.load(new URLRequest(item.@logo));
addChild(myLoader);
trace(myLoader.width);
myLoader.x = mon_x + (i *(94 + 26));
myLoader.y = mon_y + (94 * j + 26 * j);
i++; if (i 10) j (j+1) % 10;
i %= 10;
}
}
// fonction indiquant si une erreur de chargmement survient :
function indiquerErreur( event:Event ) {
trace(event);
}