Liens de boutons flash en xml? [Résolu]

Signaler
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011
-
aerolyte
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
-
Bonjour, je débute dans flash et je n'arrive pas a trouver le moyen d'utiliser des liens URL (sur mes boutons) qui seraient ecrit dans un fichier XML

je détaille:

mon code de base est le suivant en AS3:

bt1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_1);

function fl_ClickToGoToWebPage_1(event:MouseEvent):void
{
navigateToURL(new URLRequest("http://ma.servant.free.fr/VDI-GROUP/marques/magasins.html"), "_blank");
}

bt2.addEventListener(MouseEvent.CLICK, fl_ClickToGoToWebPage_2);

function fl_ClickToGoToWebPage_2(event:MouseEvent):void
{
navigateToURL(new URLRequest("http://ma.servant.free.fr/VDI-GROUP/carrieres/offres.html"), "_blank");
}

j'aimerai juste les deux adresses internet soit lu depuis un XML ou AUTRE afin de les modifiers a la demande..

Merci d'avance j'ai fait beaucoup de site different et passer plusieurs heures a chercher mais je bloque!

17 réponses

Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonsoir

Si tu as passé plusieur heure c'est que tu dois avoir une connection tres tres bas débit.
Bref:

//en debut de classe
private var liens:XML;

//dans ta fonction principale
var loader:Loader=new Loader();
loader.addEventListener(Event.COMPLETE,fin);
loader.load(new URLRequest("adresserelativedufichier.xml"));


//ta fonction fin
private function fin(evt:Event):void{
//stockage du chargement dans objet XML
if(evt.target!=null){ evt.target.removeEventListener(Event.COMPLETE,fin);
liens=new XML(evt.target.data);
liens.ignoreWhite=true;

//tu créer tes boutons
//...
//et t'ajoute un id a chaqu'un
bt1.id=1;
bt2.id=2;
//les écouteurs que tu centralise
bt1.addEventListener(MouseEvent.CLICK,naviguer);
bt2.addEventListener(MouseEvent.CLICK,naviguer);
}
}
//ta fonction naviguer (pas besoin de lui donner un nom de classe???)
private function naviguer(evt:MouseEvent):void{
navigateToURL(new URLRequest(liens.adresse[evt.target.id]), "_blank");
}


Voila tu as 90% de la solution en as3 te manque juste a chercher pour faire le xml

Cordialement
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
et bien sur trouver les 10% manquant.
Pour t'aider faut comprendre ce que j'ai fait et corriger l'erreur volontairement laissée.
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Merci pour ta réactivitée cela m'a déjà bien fait progresser,
effectivement il doit y avoir une erreur que je cherche a resoudre depuis presque 2h
Mais cela m'interresse toujours autant

voila ce que j'ai ecrit sur un nouveau calque en frame1:

// ActionScript Document//en debut de classe
  var liens:XML;

//dans ta fonction principale
var loader:Loader=new Loader();
loader.addEventListener(Event.COMPLETE,fin);
loader.load(new URLRequest("liens.xml"));


//ta fonction fin
 function fin(evt:Event):void{
//stockage du chargement dans objet XML
if(evt.target!=null){ evt.target.removeEventListener(Event.COMPLETE,fin);
liens=new XML(evt.target.data);
liens.ignoreWhite=true;


//tu créer tes boutons
//...
//et t'ajoute un id a chaqu'un
bt1.id=1;
bt2.id=2;
bt3.id=3;
bt4.id=4;

bt1.addEventListener(MouseEvent.CLICK,naviguer);
bt2.addEventListener(MouseEvent.CLICK,naviguer);
bt3.addEventListener(MouseEvent.CLICK,naviguer);
bt4.addEventListener(MouseEvent.CLICK,naviguer);
}
}
//ta fonction naviguer (pas besoin de lui donner un nom de classe???)
 function naviguer(evt:MouseEvent):void{
navigateToURL(new URLRequest(liens.adresse[evt.target.id]), "_blank");
} 


l'erreur qui en ressort 4 fois (sur chaque bt*.id=*) est:

Séquence 1, Calque 'URL', Image 1, ligne 24	1119 : Accès à la propriété id peut-être non définie, via la référence de type static flash.display:SimpleButton.


A savoir que mes boutons sont creer a partir d'images converties en symbole(bouton) directement sur des calques avec nom d'occurence bt1 et bt2. Donc je n'ai rien creer en AS3

pour le XML? est-ce que je suis sur la bonne piste?
<?xml version="1.0" encoding="ISO-8859-1"?>
 
  
  
  
  
   


Merci pour ton aide
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

bon je viens de m'apercevoir qu'il ya une erreur dans ce que je t'ai envoyé donc je reprend tout désolé:

as3
// ActionScript Document//en debut de classe
 private var liens:XML;

//dans ta fonction principale
var loader:Loader=new Loader();
loader.addEventListener(Event.COMPLETE,fin);
loader.load(new URLRequest("liens.xml"));


//ta fonction fin
 private function fin(evt:Event):void{
//stockage du chargement dans objet XML
if(evt.target!=null){ evt.target.removeEventListener(Event.COMPLETE,fin);
liens=new XML(evt.target.data);
liens.ignoreWhite=true;


//tu créer tes boutons
//...
//et t'ajoute un id a chaqu'un
bt1.id=1;
bt2.id=2;
bt3.id=3;
bt4.id=4;

bt1.addEventListener(MouseEvent.CLICK,naviguer);
bt2.addEventListener(MouseEvent.CLICK,naviguer);
bt3.addEventListener(MouseEvent.CLICK,naviguer);
bt4.addEventListener(MouseEvent.CLICK,naviguer);
}
}
//ta fonction naviguer (pas besoin de lui donner un nom de classe???)
 private function naviguer(evt:MouseEvent):void{
navigateToURL(new URLRequest(liens.adresse[evt.target.id]), "_blank");
} 


et l'erreur de compilation est :Séquence 1, Calque 'URL', Image 1, ligne 33
1013 : L'attribut private ne peut être utilisé que dans des définitions de propriétés de classes.

Merci
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonjour,
Tout d'abord félicitations pour avoir laissé tombé l'as2 a l faveur de l'as3.
Tu es en générale sur la bonne route sauf pour le xml, ou la tu es dans le fossé.

Je te laisse chercher un peu car je vois bien que ca te fait progresser.

Cordialement

PS:La petite erreur est pas la mais tu la trouvera lorsque tu aura cerné l'ecriture d'un xml
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Bonjour Formateur,

je continue de chercher comment faire mon xml, mais en ce qui concerne la faute restante dans AS3 est-elle en rapport avec l'erreur de compilation :
"1013 : L'attribut private ne peut être utilisé que dans des définitions de propriétés de classes."?

Afin que tu comprennes a quoi ressemble l'animation actuelle(et non que tu bosses a ma place) je te met a disposition mon petit projet Mon Animation Flash .FLA

Bon je retourne à mes recherches en ce qui concerne l'AS3 car je pense qu'il faut resoudre la FAUTE avant tout....
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Bon apres quelques essais j'ai fini par suppprimer les lignes
bt1.id=1;
bt2.id=2;
bt3.id=3;
bt4.id=4;
et les 3 attributs Private de l'AS3

ca donne :
// ActionScript Document//en debut de classe

 var liens:XML;

//dans ta fonction principale
var loader:Loader=new Loader();
loader.addEventListener(Event.COMPLETE,fin);
loader.load(new URLRequest("liens.xml"));

//fonction fin
 function fin(evt:Event):void{

//stockage du chargement dans objet XML
if(evt.target!=null){ evt.target.removeEventListener(Event.COMPLETE,fin);
liens=new XML(evt.target.data);
liens.ignoreWhite=true;

//tu créer tes boutons

//et t'ajoute un id a chaqu'un

bt1.addEventListener(MouseEvent.CLICK,naviguer);
bt2.addEventListener(MouseEvent.CLICK,naviguer);
bt3.addEventListener(MouseEvent.CLICK,naviguer);
bt4.addEventListener(MouseEvent.CLICK,naviguer);
}
}

 function naviguer(evt:MouseEvent):void{
navigateToURL(new URLRequest(liens.adresse[evt.target.id]), "_blank");
} 


et du coup l'animation se lance parfaitement....mais les liens ne fonctionnent pas !
Je me dis que du coup mon code AS3 est bon et qu'il me reste plus que le XML a refaire.
Est-ce vrai?

Cordialement
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
re,
en faite c'est pas ca:

1>l'erreur 1013 viens du faite que tu as du oublier un "}" quelque part avant la ligne 33.

2> si tu enleve les id forcement ls liens ne fonctionnent pas
liens.adresse[evt.target.id]

Courage
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

re
Impossible de comprendre ce qu'il ne va pas dans l'AS3 je suis vraiment perdu.

le code que j'utilise est celui que tu m'as envoyé et je ne voit pas ou il peut manquer un "}"...

je m'en sors pas quand je répare un erreur de compilation j'en ai d'autre qui apparaissent

quand j'enlève les attributs Private qui me posais problème ce sont les "id" qui pose problème.
Je n'ai pas vraiment de base, j'apprends sur le tas mais tout seul je fini par m'embrouiller.

Pourrais-tu me donner la solution, que je comprenne enfin!

MERCI
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Voici mon XML:
<?xml version= "1.0" encoding="utf-8"?>
 
<xml>
    
<liens id ='1'>
       'http://c.miorin.free.fr' 
</liens>;

<liens id  ='2'>
      'http://c.miorin.free.fr'
</liens>;

<liens id = '3'>
           'http://c.miorin.free.fr' 	
</liens>;
      
<liens id  ='4'>
      'http://c.miorin.free.fr'
</liens>;

 </xml>


Déja mieux nan?
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Re,
2 choses:
1] en as3 on ne code ni dans le scénario, ni dans les cips de la librairie
2] pour le xml c'est simplement ca:


<lien><![CDATAhttp://c.miorin.free.rf]></lien>
<lien><![CDATAhttp://c.miorin.free.rf]></lien>
<lien><![CDATAhttp://c.miorin.free.rf]></lien>
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Bonjour,

je pense me rapprocher du but....

var urlRequest:URLRequest   = new URLRequest("liens.xml");
var loaderXML:URLLoader     = new URLLoader();

loaderXML.addEventListener(Event.COMPLETE, fin); 
loaderXML.addEventListener(IOErrorEvent.IO_ERROR, error); 
loaderXML.load(urlRequest);


 function fin(evt:Event):void
{
   
    var xml:XML = new XML(evt.target.data);
    xml.ignoreWhite=true;

    trace(''+xml.lien)
}

 function error(evt:IOErrorEvent):void
{
    trace("Erreur du chargement du XML : " + evt);
}



avec ce code j'arrive a lire les liens en sortie
mais je n'arrive pas a utiliser les liens dans
navigateToURL(new URLRequest(liens.adresse[evt.target.id]), "_blank");


Please help me

ps: flash lis ca dans le xml:
contenu<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
contenu<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
contenu<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
contenu<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
contenu<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
contenu<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>
<lien><![CDATAhttp://c.miorin.free.fr]></lien>

ET CA DEFILE EN CONTINUE


MERCI
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

surtout ne me dis rien j'y suis presque!!!
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Hé bien voila les nombreuses heures de recherches, mes 5 h de sommeil chaque nuit( car je travaille la journée), ainsi que tes conseils qui sont a la base de ma réussite ont PAYé!!!!!

J'ai réecrit le code entièrement sur mes acquis qui ne date que d'à peine 2 semaines je suis très content de moi!

j'imagine que t'écrit en 30 sec mais bon.
il doit y avoir plus simple quand même car si j'avais 15 boutons cela ferai trop a écrire!!!


voila les codes dis moi ce que tu en pense?
<?xml version="1.0" encoding="utf-8"?>
 


    <lien>http:/c.miorin.free.fr</lien>
    <lien>http:/ec41.free.fr</lien>
    <lien>http:/www.appelezmoimadame.fr.free.fr</lien>
    <lien>http:/www.snotr.com</lien>



var urlRequest:URLRequest   = new URLRequest("xml/liens.xml");
var loaderXML:URLLoader     = new URLLoader();

loaderXML.addEventListener(Event.COMPLETE, fin); 
loaderXML.load(urlRequest);


 function fin(e:Event):void
{
   
    var xml:XML = new XML(e.target.data);
    var url= xml.lien;

var requrl1:URLRequest=new URLRequest (url[0]);
var requrl2:URLRequest=new URLRequest (url[1]);
var requrl3:URLRequest=new URLRequest (url[2]);
var requrl4:URLRequest=new URLRequest (url[3]);

trace('contenu : '+url);
bt1.addEventListener(MouseEvent.CLICK,naviguer1);
bt2.addEventListener(MouseEvent.CLICK,naviguer2);
bt3.addEventListener(MouseEvent.CLICK,naviguer3);
bt4.addEventListener(MouseEvent.CLICK,naviguer4);

    function naviguer1(evt:MouseEvent):void{
    navigateToURL(requrl1);
}
 function naviguer2(evt:MouseEvent):void{
    navigateToURL(requrl2);
}
 function naviguer3(evt:MouseEvent):void{
    navigateToURL(requrl3);
}
 function naviguer4(evt:MouseEvent):void{
    navigateToURL(requrl4);
} 
}


Encore Merci et j'attends un petit avis de ta par... En plus si tu peux m'expliquer pourquoi tu utilisé des attributs Private (peux-etre dans un fichier AS externe avec des "import...."
en en-tête)
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonsoir,

Cela fait plaisir de voir que tu as réussi a faire tourner ton code, bien que...

L'attribut private est effectivement la car, en as3, il est d'usage de travailler sur des scripts externe.
Ce n'est pas un usage simplement dicté par une convention, mais bien découlant de nombreux avantages, en procéder ainsi.

Ton code certe fonctionne, mais n'est pas pas du tout dynamique et encore moins optimisé. Si je parle de l'optimisation, cela peut paraitre secondaire, mais de facon générale on peut diviser le poids et la charge mémoire très conséquemment, avec un poil plus de rigueur.
Il faut visualiser une function comme le traitement le plus large possible d'une action unique.
Comme cela signifie tout et rien, je vais illustrer mon propos.

1>Dans ton cas tu as 4 function qui effectuent la même action (navigateToURL), c'est redondant,donc inutile et comme tu le souligne pas du tout dynamique.
La solution consiste donc a faire une seule fonction qui traitera la meme action avec une variable (ici l'url).

function naviguer4(evt:MouseEvent,lurl:String):void{navigateToURL(String);}

Mais comme tu t'en doute cela n'est pas si simple que ca car les functions événementielle n'accepte pas par défaut d'autres variables.

Il existe un moyen pour en faire passer, que j'ai souvent utilisé, mais ce n''est pas la panacée.
L'idéale est d'associé directement a une propriété du bouton cette variable.
d'ou le
btn1.id=0;
btn2.id=1;
...
De ce facon plus besoin de faire passer des variables, car elles font parties intégrante de l'objet. Dans une function évenementielle, l'objet qui est a l'origine de l'evenement est toujours accessible avec .target

Donc ici, en ecrivant:
function naviguer(evt:MouseEvent):void{trace(evt.target.id);}

on retrouvera bien en sortie l'id du bouton cliqué.

A quoi correspond cette id, ben tout simplement a la valeur du noeud du xml stockant les urls

Soit, en reprenant ton code:
function naviguer(evt:MouseEvent):void{
trace(xml.lien[evt.target.id]);
}
on obtiendra bien en sortie le nom de ton lien.

Bref j'ai utilisé l'id car normalement c'est une propriété accessible a tout displayobject.
Mais on peut envisager avec quelques modifications de créer autant de propriétés que l'on veut sur les objets.( c'est à mon avis le nec plus ultra dans le developpement).

Bon, je pense que tu vas repasser par la case,"je sors mon script du fla", et tu vas découvrir un nouvel univers dangereux, difficile, mais au combien plus vaste et libre.

Courage
Messages postés
11
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
31 mai 2011

Merci encore pour toute ces infos!
Lorsque j'ecrit bt1.id=1;
j'ai l'erreur

1119 : Accès à la propriété id peut-être non définie, via la référence de type static flash.display:SimpleButton.

Je vais chercher mais si tu as une idée je suis preneur....

CDT
Messages postés
465
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
Bonjour, réalise un bouton dans ton script
a base de sprite+buttonMode+eventlistener
Cordialement