Forums Développement Multimédia

Aller au contenu

données xml et conversion en urlRequest AS3

CODE

14 réponses à ce sujet

#1 mamiechoc

    Ceinture Blanche

  • Members
  • Pip
  • 12 messages

Posté 08 February 2015 - 10:31 AM

Bonjour à tous et bon dimanche.
J'ai un problème que je n'arrive pas à résoudre malgré de multiples mais infructueuses recherches.

Voici mon xml Menu:

<personnages>
<Amede>
<lienMenuMini10Pz1>"http://dan-le-baudet.com/puzziland/accueilJeux/puzzle10/amede/episode1/puzzle.html"</lienMenuMini10Pz1>
</Amede>
</personnages>
 

et mon xml boutons:

<MenuBoutons>
<puzzle>
<posMenuPuzzleX>0</posMenuPuzzleX>
<posMenuPuzzleY>0</posMenuPuzzleY>
</puzzle>
</MenuBoutons>
 

Voici mon code AS3 :

import flash.display.*;
import flash.xml.XMLNode;
import flash.xml.XMLDocument;
import flash.events.*;
import flash.net.navigateToURL;
import flash.net.SharedObject;
import flash.net.SharedObjectFlushStatus;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
import flash.system.ApplicationDomain;
import flash.text.*;
/*LE XML MENU*/
var xmlMenu:XML;
var chargeurXML:URLLoader = new URLLoader();
chargeurXML.dataFormat = URLLoaderDataFormat.TEXT;
var adresseXML:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/liens.xml");
chargeurXML.load(adresseXML);
chargeurXML.addEventListener(Event.COMPLETE, finDuChargement);
/*LE XML BOUTONS*/
var xmlBoutons:XML;
var chargeurXMLBoutons:URLLoader = new URLLoader();
var adresseXMLBoutons:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/posBoutons.xml");
chargeurXMLBoutons.load(adresseXMLBoutons);
chargeurXMLBoutons.addEventListener(Event.COMPLETE, finDuChargement);
/*LA BIBLIOTHEQUE BOUTONS*/
var URLBiblioBoutons:String ="http://dan-le-baudet.com/puzziland/biblioGeneral/biblioBoutons.swf";
var loaderBiblioBoutons:Loader = new Loader();
var requeteBiblioBoutons:URLRequest = new URLRequest(URLBiblioBoutons);
loaderBiblioBoutons.load(requeteBiblioBoutons);
addChild(loaderBiblioBoutons);
loaderBiblioBoutons.contentLoaderInfo.addEventListener(Event.COMPLETE, finDuChargement);
function finDuChargement(et:Event):void {
/* on récupère notre xml menu*/
   var XmlMenu = new XML(chargeurXML.data);
  /* on récupère les donnees xml menu*/
         for each(var propertyAmede:XML in XmlMenu.personnages.Amede) {
                 var urlMini10Pz1:String=propertyAmede.menuMini10Pz1.lienMenuMini10Pz1;
        }
/* on récupère notre xml boutons*/
var XmlBoutons = new XML(chargeurXMLBoutons.data);
/* on récupère les donnees xml boutons*/
for each(var propertyBoutons:XML in XmlBoutons.puzzle) {
  var posMenuEp1X=propertyBoutons.posMenuEp1X;
  var posMenuEp1Y=propertyBoutons.posMenuEp1Y;
  trace("xml boutons chargé");
}
/*creation class des bibliotheques*/
var domain1:ApplicationDomain = loaderBiblioBoutons.contentLoaderInfo.applicationDomain;trace("trace loaderBiblioBoutons chargee");
var Episode1:Class=domain1.getDefinition("Episode1") as Class;trace("creation class Episode1");
/*creation du bouton*/
var menuPz10ep1=new Episode1();
menuPz10ep1.x=posMenuEp1X;
menuPz10ep1.y=posMenuEp1Y;
trace("creation clip menuPz10ep1");
addChild(menuPz10ep1);
/*creation de la fonction clic sur le bouton*/
function clickLienPz10ep1(evt:MouseEvent):void{
        navigateToURL(new URLRequest(urlMini10Pz1));
        }
        menuPz10ep1.addEventListener(MouseEvent.CLICK, clickLienPz10ep1);
}
 

Lorsque je compile mon swf, j'ai ce message d'erreur en sortie:

xml boutons chargé
trace loaderBiblioBoutons chargee
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 menuMediabox_fla::MainTimeline/finDuChargement()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
xml boutons chargé
trace loaderBiblioBoutons chargee
ReferenceError: Error #1065: La variable Episode1 n'est pas définie.
at flash.system::ApplicationDomain/getDefinition()
at menuMediabox_fla::MainTimeline/finDuChargement()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
xml boutons chargé
trace loaderBiblioBoutons chargee
creation class Episode1
creation clip menuPz10ep1

Or, voici mon swf publié dans une page html :
http://dan-le-baudet.../menuAmede.html

De plus, cela vient-il de là mais mon url ne fonctionne pas.
Quelqu'un aurait-il la gentillesse de m'aider?

#2 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 11:59 AM

bonjour
j'ai survollé avec un fla ca serait peut etre plus cool

j'ai vu

function finDuChargement(et:Event):void {
/* on récupère notre xml menu*/
   var XmlMenu = new XML(chargeurXML.data);
 
var XmlMenu = pas cool

@+ gustave02

#3 mamiechoc

    Ceinture Blanche

  • Members
  • Pip
  • 12 messages

Posté 08 February 2015 - 12:50 PM

Bonjour, Gustave02 et merci de ton aide.

J'ai donné mon code as3 du panneau Actions de mon fla qui est vide puisque je charge mes clips d'une bibliothèque externe.

Quand à ma portion de code

/* on récupère notre xml menu*/
   var XmlMenu = new XML(chargeurXML.data);
  /* on récupère les donnees xml menu*/
                 for each(var propertyAmede:XML in XmlMenu.personnages.Amede) {
                                 var urlMini10Pz1:String=propertyAmede.menuMini10Pz1.lienMenuMini10Pz1;
            }
 

je l'ai remplacé par :

/* on récupère notre xml menu*/
   var XmlLiens:XML = new XML(chargeurXML.data);
  /* on récupère les donnees xml menu*/
         for each(var propertyAmede:XML in XmlLiens.personnages.Amede) {
                 var urlMini10Pz1:String=propertyAmede.menuMini10Pz1.lienMenuMini10Pz1;
trace("lien amede :"+ propertyAmede.menuMini10Pz1.lienMenuMini10Pz1);
    }
 

Je récupère bien, en sortie mon url que je mets en gras pour plus de lisibilité:

xml boutons chargé
trace loaderBiblioBoutons chargee
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 menuAmede_fla::MainTimeline/finDuChargement()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
lien amede :"http://dan-le-baudet.com/puzziland/accueilJeux/puzzle10/amede/episode1/puzzle.html"
xml boutons chargé
trace loaderBiblioBoutons chargee
ReferenceError: Error #1065: La variable Episode1 n'est pas définie.
at flash.system::ApplicationDomain/getDefinition()
at menuAmede_fla::MainTimeline/finDuChargement()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
lien amede :"http://dan-le-baudet.com/puzziland/accueilJeux/puzzle10/amede/episode1/puzzle.html"
xml boutons chargé
trace loaderBiblioBoutons chargee
creation class Episode1
creation clip menuPz10ep1

mais cela ne résout en rien mon problème.
Si tu as d'autres suggestions, ce serait très sympa de ta part car je vais finir par m'arracher les quelques cheveux blancs que j'ai encore sur la tête.

#4 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 15:29 PM

re
j'ai vu tes modifs mais !!!!!!!

si je met
var n:Number;// ca veut dire je déclare une variable que j'appelle n est qui est de la class nombre

si je veux la récupérer dans le script je l'appelle simplement n
exemple je veux passer n a 1;
je dis n = 1;

toi tu as redeclaré une variable qui se trouve dans une fonction


var n:Number = 0 ;
trace(n);
function change():void{
var n:Number = 1;
trace (n + "    dans fonction");
}
change();
trace(n);
 

regarde ce que ca donne avec un ex simple.
teste tu vas comprendre ce que je veux dire
http://www.bases-as3...1-les-variables pour info
@+ gustave02

ps je matte le reste

#5 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 15:54 PM

ok tu lances 3 chargement de fichier 2 xml je crois et un swf
les 3 loader déclenche la même fonction de fin de chargement


chargeurXML.addEventListener(Event.COMPLETE, finDuChargement);
chargeurXMLBoutons.addEventListener(Event.COMPLETE, finDuChargement);
loaderBiblioBoutons.contentLoaderInfo.addEventListener(Event.COMPLETE, finDuChargement);
 
tu penses bien que tes chargement ne se termine pas en même temps
donc tu demande 3 fois la fonctions et que (et:Event) et a chaque fois différent

#6 mamiechoc

    Ceinture Blanche

  • Members
  • Pip
  • 12 messages

Posté 08 February 2015 - 15:56 PM

Mecri Gustave02.
Je vais chercher dans ce sens et je viendrai partager le résultat de mes travaux.
A plus tard.

#7 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 16:06 PM


var XmlMenu:XML;
var xmlBoutons:XML;

var chargeurXML:URLLoader = new URLLoader();
chargeurXML.dataFormat = URLLoaderDataFormat.TEXT;
var adresseXML:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/liens.xml");
chargeurXML.load(adresseXML);
chargeurXML.addEventListener(Event.COMPLETE, finDuChargement1);

var chargeurXMLBoutons:URLLoader = new URLLoader();
var adresseXMLBoutons:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/posBoutons.xml");
chargeurXMLBoutons.load(adresseXMLBoutons);
chargeurXMLBoutons.addEventListener(Event.COMPLETE, finDuChargement2);


var loaderBiblioBoutons:Loader = new Loader();
var requeteBiblioBoutons:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/biblioGeneral/biblioBoutons.swf");
loaderBiblioBoutons.load(requeteBiblioBoutons);
addChild(loaderBiblioBoutons);
loaderBiblioBoutons.contentLoaderInfo.addEventListener(Event.COMPLETE, finDuChargement3);

function finDuChargement1(et:Event):void {
trace(et.target.data);
}
function finDuChargement2(et:Event):void {
trace(et.target.data);
}
function finDuChargement3(et:Event):void {
//addChild(et.target.loader.content); je vois pas de swf
}
 

peut etre une piste a suivre

#8 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 16:27 PM


function finDuChargement1(et:Event):void {
var liste:XMLList = new XMLList(et.target.data); trace(liste);
    var urlMini10Pz1:String = liste.personnages.Amede[0].menuMini10Pz1.lienMenuMini10Pz1;
trace(urlMini10Pz1);
}
 
je sais pas si je vais dans le bon sens car je ne vois pas ce que tu veux au final

#9 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 17:47 PM


var XmlMenu:XML;
var XmlBoutons:XML;
var loaderBiblioBoutons:Loader;

var chargeurXML:URLLoader = new URLLoader();
chargeurXML.dataFormat = URLLoaderDataFormat.TEXT;
var adresseXML:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/liens.xml");
chargeurXML.load(adresseXML);
chargeurXML.addEventListener(Event.COMPLETE, finDuChargement1);
function finDuChargement1(et:Event):void {
XmlMenu = new XML(et.target.data);
var chargeurXMLBoutons:URLLoader = new URLLoader();
var adresseXMLBoutons:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/posBoutons.xml");
chargeurXMLBoutons.load(adresseXMLBoutons);
chargeurXMLBoutons.addEventListener(Event.COMPLETE, finDuChargement2);
}
function finDuChargement2(et:Event):void {
XmlBoutons = new XML(et.target.data);
loaderBiblioBoutons = new Loader();
var requeteBiblioBoutons:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/biblioGeneral/biblioBoutons.swf");
loaderBiblioBoutons.load(requeteBiblioBoutons);
addChild(loaderBiblioBoutons);
loaderBiblioBoutons.contentLoaderInfo.addEventListener(Event.COMPLETE, finDuChargement3);
}
function finDuChargement3(et:Event):void {
var domain1:ApplicationDomain = loaderBiblioBoutons.contentLoaderInfo.applicationDomain;
var Episode1:Class = domain1.getDefinition("Episode1") as Class;
var objet:DisplayObject = new Episode1() as DisplayObject;
var menuPz10ep1:Sprite = new Sprite();
menuPz10ep1.addChild(objet);
menuPz10ep1.x = XmlBoutons.puzzle.posMenuEp1X;
menuPz10ep1.y = XmlBoutons.puzzle.posMenuEp1Y;
menuPz10ep1.buttonMode = true;
stage.addEventListener(MouseEvent.CLICK, clickLienPz10ep1);
addChild(menuPz10ep1);
}
function clickLienPz10ep1(evt:MouseEvent):void{
var nav:String = XmlMenu.personnages.Amede[0].menuMini10Pz1.lienMenuMini10Pz1;
        navigateToURL(new URLRequest(nav),'_blank');
}
 

je décrpte un peu
phase1
il faut lancer le chargeurXML en premier car tu vas chercher des infos dedans pour avoir une adresse interent en phase 3
des que charger
phase2
il faut lancer le chargeurXMLBoutons car tu vas chercher des infos dedans pour avoir la position bouton en phase 3
phase 3
tu charge ta class pour créer ton bouton ("pouuuf!!!);
tu le place sur la scène selon tes coordonnées
tu créer ton écouteur et il marche pas?
faudrait savoir ce que tu as dans ta class.

j'espere que ca t'aides.
@+ gustave02

#10 mamiechoc

    Ceinture Blanche

  • Members
  • Pip
  • 12 messages

Posté 08 February 2015 - 17:53 PM

Merci encore, gustave02 et félicitation pour ton passage à ceinturemarron.

Ce que je veux est très simple, en fait :
1. Je veux afficher un bouton provenant de ma bibliotheque

2 positionner mon bouton selon les positions contenues dans mon xml boutons que je n'ai pas mis en début de post. Je rectifie de suite.
Le voici :

<MenuBoutons>
<puzzle>
<posMenuPuzzleX>0</posMenuPuzzleX>
<posMenuPuzzleY>0</posMenuPuzzleY>
</puzzle>
</MenuBoutons>

et, quand je clique dessus,
3 . aller à l'adresse indiquée dans mon xml Menu

Je mets au point mon code avec un seul bouton mais il est bien évident qu'il y en aura plusieurs, d'où l’utilisation des xml.

Je me mets de ce pas à l'étude de ton dernier post.

C'est très sympa de se sentir épaulée. Merci encore.

#11 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 18:05 PM

alors dans la dernière version je positionne ton bouton
mais ca bloque avec la fonction click de ton bouton
voir si tout ne doit pas être dans le même dossier (ftp) nom de domaine.
@+ gustave02

#12 mamiechoc

    Ceinture Blanche

  • Members
  • Pip
  • 12 messages

Posté 08 February 2015 - 18:15 PM

Merci.
J"allais te poster exactement la même chose. Mais cela prouve que tu m'as mise sur la bonne voie car je n'ai plus d'erreur en sortie.
Je vais tenter le coup, dès demain matin car, comme tu l'as compris, je suis une mamie et...je fatigue.
Je testerai tout cela demain matin;
Je déménagerai tous les fichiers loadés dans un même dossier et je te tiens au courant.
Merci encore et bonne soirée à toi.

#13 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 08 February 2015 - 18:24 PM

ok
bonne soirée.
@+ gustave02

#14 mamiechoc

    Ceinture Blanche

  • Members
  • Pip
  • 12 messages

Posté 09 February 2015 - 08:04 AM

Ca y est. J'ai trouvé la solution. Merci, Gutave02.
Grace à toi, j'ai compris pas mal de chose et c'est précieux d'avoir de l'aide de gens prêts à consacrer du temps aux autres.

Voici mon code complet :

J'ai fusionné mes deux 2 xml en 1 seul :

<puzziland>
<boutons>
  <posMenuPz10X>0</posMenuPz10X>
  <posMenuPz10Y>68</posMenuPz10Y>
</boutons>
<personnages>
  <Amede>
   <dossier>amede</dossier>
   <menuMini10Pz1>
        <etatMenuMini10Pz1>offLigne</etatMenuMini10Pz1>
   </menuMini10Pz1>
  </Amede>
</personnages>
</puzziland>
 

J'ai modifié mon as3 ainsi :


/*LE XML MENU*/
var xmlMenu:XML;
var chargeurXML:URLLoader = new URLLoader();
chargeurXML.dataFormat = URLLoaderDataFormat.TEXT;
var adresseXML:URLRequest = new URLRequest("http://dan-le-baudet.com/puzziland/xml/liens.xml");
chargeurXML.load(adresseXML);
chargeurXML.addEventListener(Event.COMPLETE, finDuChargement);

function finDuChargement(et:Event):void {
/* on récupère notre xml menu*/
var XmlLiens = new XML(chargeurXML.data);
/* on récupère les donnees xml menu*/
for each(var propertyAmede:XML in XmlLiens.personnages.Amede) {
var etatMini10Pz1=propertyAmede.menuMini10Pz1.etatMenuMini10Pz1;

trace("etats chargés");
}


/* on récupère nos positions boutons*/
var XmlBoutons = new XML(chargeurXML.data);
/* on récupère les donnees xml boutons*/
for each(var propertyBoutons:XML in XmlBoutons.boutons) {
var posMenuEp1X=propertyBoutons.posMenuEp1X;
var posMenuEp1Y=propertyBoutons.posMenuEp1Y;
trace("xml boutons chargé");
}
/*on charge la bibliotheque boutons*/
var URLBiblioBoutons:String ="http://dan-le-baudet.com/puzziland/biblioGeneral/biblioBoutons.swf";
var loaderBiblioBoutons:Loader = new Loader();
var requeteBiblioBoutons:URLRequest = new URLRequest(URLBiblioBoutons);
loaderBiblioBoutons.load(requeteBiblioBoutons);
addChild(loaderBiblioBoutons);
loaderBiblioBoutons.contentLoaderInfo.addEventListener(Event.COMPLETE, finDuChargementBibliotheque);

function finDuChargementBibliotheque(et:Event):void {
/*creation class des bibliotheques*/
var domain1:ApplicationDomain = loaderBiblioBoutons.contentLoaderInfo.applicationDomain;trace("trace loaderBiblioBoutons chargee");
/*les class*/
var Episode1:Class=domain1.getDefinition("Episode1") as Class;trace("creation class Episode1");
/*Les clips*/
var menuPz10ep1=new Episode1();
menuPz10ep1.x=posMenuEp1X;
menuPz10ep1.y=posMenuEp1Y;
trace("creation clip menuPz10ep1");
/*on ajoute le bouton Puzzle sur la scene*/
addChild(menuPz10ep1);
trace("trace addChild menuPz10");
/*on cree les url navigateToUrl sur les boutons du 3ème etage*/
var cheminUrl:String="http://dan-le-baudet.com/puzziland/accueilJeux/";
/*..........*/
var cheminPuzzle10:String="puzzle10/";
/*..........*/
var dossierUrl:String=XmlLiens.personnages.Amede.dossier;
/*..........*/
var lienEpisode1:String="/episode1/puzzle.html";
/*..........*/
var textHtml10Ep1:String=cheminUrl+dossierUrl+lienEpisode1;


/*on cree les fonction  sur le bouton*/
function clickLienPz10ep1(evt:MouseEvent):void{
var textHtml10Ep1:String=cheminUrl+cheminPuzzle10+dossierUrl+lienEpisode1;
navigateToURL(new URLRequest(textHtml10Ep1));
}
menuPz10ep1.addEventListener(MouseEvent.CLICK, clickLienPz10ep1);

}//function finDuChargementBibliotheque

}//fonction fin de chargement
 

Et voilà le résultat :
http://dan-le-baudet.../menuAmede.html

A partir de cette base, tout est permis.
En espérant que cela pourra aider d'autres membres.
Ce code peut être sûrement amélioré. Toutes les suggestions sont bonnes à prendre car, même si cela marche, je ne suis pas sûre de coder dans les règles de l'art.

Bonne journée à tous

#15 gustave02

    Ceinture Marron

  • Members
  • PipPipPipPipPipPip
  • 166 messages

Posté 09 February 2015 - 08:24 AM

bonjour
content que ça marche.
fais nous savoir quand le projet de ton site sera fini.
entre temps si t'as besoin le forum est là.
@+gustave02



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