IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

AS3 : function xml et timeline


Sujet :

ActionScript 3

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut AS3 : function xml et timeline
    Bonjour,

    ca fait plusieurs jours que je me prend la tête pour faire un truc banal pour ma boite et je m'en sors pas. je suis débutant et autodidacte mais même après plusieurs heures de lecture de fofo et tuto divers, rien à faire...

    l'idée :

    sur une time line de 30 frame, faire défiler un texte issue d'un fichier xml et a chaque fois que je boucle, le texte affiché correspond a l'occurence suivante du fichier xml.
    ce xml serait raffraichit régulièrement pour les nouvelles infos.

    exemple de xml :

    <root>
    <MAGASIN>
    <ENSEIGNE> enseigne 1 </ENSEIGNE>
    <MESSAGE> message à afficher 1 </MESSAGE>
    </MAGASIN>
    <MAGASIN>
    <ENSEIGNE> enseigne 2 </ENSEIGNE>
    <MESSAGE> message à afficher 2 </MESSAGE>
    </MAGASIN>
    </root>


    Principe du AS3 que je pensais :

    sur la frame 0, chargement du fichier XML et pose des données dans un ARRAY
    sur la frame 1, j'affiche la première occurence
    interpolation jusqu'à la frame 30 ou j'incrémente une variable et je fait un gotoandplay(1) pour boucler et si j'arrive au nombre d'occurence du fichier, je repart à 0 pour recharger le xml avec eventuellement de nouvelles données, etc..

    j'arrive a charger le xml et alimenter l'array mais je perds mes données dès que je sors de ma fonction de chargement xml et si je fait un appel d'une seconde fonction en frame 1 pour afficher, je ne suis pas capable de lire le reste a la prochaine boucle.


    je ne sais plus quoi faire, help me plzz

    merci,
    Emmanuel.

  2. #2
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    bonjour
    je pense que tu instancie ("créer") ta variable au mauvais endroit.

    si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function truc():void{  var machin:uint = 12 ; }
     
    truc();
     
    trace(machin);
    tu auras un code erreur 1120:accés à la propriété non définie machin car machin est créer dans la fonction et machin est éliminer a la sortie de la fonction.

    si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var machin:uint;
     
    function truc():void{  machin = 12 ; }
     
    truc();
     
    trace(machin);
    donne dans le panneau de sortie 12;

    c'est pareil avec toutes les sortes de variables meme un Array ou un Xlm

    ok?
    @+gustave02

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    bonjour,

    merci de ta réponse.

    j'ai bien lu celà, les variables doivent être déclaré hors fonction pour etre utilisable dedans et dehors de la fonction

    sauf.. ben que çà fonctionne pas dans mon cas pour l'array

    le code qui est en frame 0:


    var i:Number = 0;

    var myXML:XML = new XML();
    var fichier:Array = new Array();
    var myLoader:URLLoader = new URLLoader();
    myLoader.load(new URLRequest("c:/temp/sample.xml"));
    myLoader.addEventListener(Event.COMPLETE, processXML);

    function processXML(e:Event):void
    {

    myXML = new XML(e.target.data);



    for (i = 0; i < myXML.Alerte.length(); i++)
    {
    fichier.push(myXML.Alerte.Incident[i]);

    }

    }

    trace(fichier[0]);

    le array fichier se charge bien dans la fonction mais or de la fonction j'ai plus rien (Problème 1 est attendu) :

    dedans :
    Les polices doivent être incorporées pour tous les textes pouvant être modifiés à l'exécution, hormis pour les textes dont le paramètre "Utiliser les polices de périphérique" est activé. Utilisez la commande Texte > Incorporation de polices pour incorporer les polices.
    Problème 1


    dehors
    Les polices doivent être incorporées pour tous les textes pouvant être modifiés à l'exécution, hormis pour les textes dont le paramètre "Utiliser les polices de périphérique" est activé. Utilisez la commande Texte > Incorporation de polices pour incorporer les polices.
    undefined



    je ne comprend pas pourquoi j'ai un undefined....

    le fichier xml :
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <root>
    <Alerte>
    <Enseigne>Magasin 1</Enseigne>
    <Incident>Problème 1</Incident>
    </Alerte>
    <Alerte>
    <Enseigne>Magasin 2</Enseigne>
    <Incident>Problème 2</Incident>
    </Alerte>
    </root>


    Merci,
    Emmanuel.

  4. #4
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    j'ai vu ton code
    tout bien. mais y a un truc que tu prends pas en compte et c'est la ton erreur.

    le truc c'est le temps de chargement du XML
    je reprend ton code avec explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    ///var i:Number = 0;//ça c'est nul je vire car la class number est prévu pour un chiffre qui a une virgule.
    //ici i n'aura jamais de virgule et pas  besoin de garder ça valeur.
     
    //var myXML:XML = new XML();// ça je vire car tu transforme ton XML en tableau 
     
    var fichier:Array = new Array();// OK car c'est le tableau qui a les infos que veut conserver
     
    var myLoader:URLLoader = new URLLoader(); /// le chargeur
    myLoader.load(new URLRequest("c:/temp/sample.xml")); // l'adresse
    myLoader.addEventListener(Event.COMPLETE, processXML);// appel de la fonction quand le chargement est termine.
     
    function processXML(e:Event):void { // la fonction qui sera réalisée que quand le chargement est terminé et pas avant
    var myXML:XML  = new XML(e.target.data);
     
    for (var i:uint; i < myXML.Alerte.length(); i++)
    {
    fichier.push(myXML.Alerte.Incident[i]); // tu rempli ton tableau 
     
    }
     
    }
     
    trace(fichier[0]); // tu fais un trace de ton tableau mais tu n'as pas encore chargé le fichier XML c'est entrain mais pas fini la fonction "processXML"('mal nommée "completXML" serait plus juste) n'a pas été réalisée
    pour prouver que j'ai raison j'ai fait un petit test

    j'ai mis l'exemple en ligne et tu peux avoir accès au fla

    http://www.citroen-france-tours-nord...manounours.htm

  5. #5
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    tu dis que tu as l'erreur

    "Les polices doivent être incorporées pour tous les textes pouvant être modifiés à l'exécution, hormis pour les textes dont le paramètre "Utiliser les polices de périphérique" est activé. Utilisez la commande Texte > Incorporation de polices pour incorporer les polices.
    Problème 1"

    donc soit tu intégré un police de texte

    ou tu clique sur ton champ de texte et tu vas la propriete comme sur la photo ou dans le fla de demo
    Nom : i.png
Affichages : 186
Taille : 274,4 Ko

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    merci de votre précieuse aide car jamais je n'aurai trouvé seul.

    Du coup j'ai adapté comme tu indiquais le code via le fla, et ca fonctionne !
    je vous donne le résultat :

    frame 0

    import flash.events.Event;
    var n:uint=0;
    var l:uint=0;

    var fichier:Array = new Array();


    function charge():void{
    var myLoader:URLLoader = new URLLoader();
    myLoader.load(new URLRequest("c:/temp/sample.xml"));
    myLoader.addEventListener(Event.COMPLETE, processXML);
    }



    function processXML(e:Event):void{
    var myXML:XML = new XML(e.target.data);
    l=myXML.Alerte.length();
    for (var i:uint; i < l; i++)
    {
    fichier.push(myXML.Alerte.Incident[i]);
    }


    }

    function affichage(e:Event):void{
    desctext.text=fichier[n];
    }

    charge();

    => je charge mon xml ainsi que mon tableau.. je déclare également la fonction affichage qui sera appelé via un event sur la frame 2
    mes 2 variables n & l :
    n = la position du tableau qui m'intéresse d'afficher
    l = le nombre d'incident a exploiter dans mon xml

    frame 2 :

    this.addEventListener(Event.ENTER_FRAME, affichage);
    => j'ai adapté ton code car toi tu faisais par clic de souris, moi ca doit être automatique.




    le texte défile de haut en bas via boite de texte dynamique en interpolation (ici desctext)

    frame 49
    if (n==l-1) {
    charge();
    n=0;
    } else {
    n++;
    }
    gotoAndPlay(2);

    => si j'arrive au bout du xml (n = l-1 car je commande à 0), je recharge mon xml et réinitialise ma variable n
    sinon j'incrémente ma varianle n et je retourne en frame 2 réactualiser l'affichage de mon texte dynamique


    le code est encore brouillon mais clair que c'est un grand pas que vous m'avez fait.

    pour le pb de police de caractère, la solution donnée a fonctionné.

    Merci
    Je vous donnerai le final dès que celà sera fait


    Emmanuel.

  7. #7
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    ok
    je vois que tu as compris que tu n'avais pas pris en compte le temps de chargement de ton fichier.

    bien, MAIS!!!!

    je note que tu vas recharger . donc fait attention tu as et j'avais mis dans mon exemple

    var fichier:Array = new Array(); et la ça va poser blême puisque que tu recharges et que tu vas ajouter les info rechargé a la suite dans ton tableau

    solution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    var fichier:Array; 
    function processXML(e:Event):void{
    	var myXML:XML  = new XML(e.target.data);
    	fichier = new Array();   ///////////////////////////////////////on dit que fichier et un nouveau tableau vide
    	for (var i:uint; i < myXML.Alerte.length(); i++){
    		fichier.push(myXML.Alerte.Incident[i]);
    	}
    }
    autre chose qui me pose blême


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    this.addEventListener(Event.ENTER_FRAME, affichage);/// a chaque image tu déclenche la fonction ça sert a rien une fois suffirait. ok ton projet et petit et ça va pas utiliser toutes les ressource de l'ordi, MAIS. 
    function affichage(e:Event):void{
            desctext.text=fichier[n];
    }
    et quand tu recharge

    frame 49
    if (n == l-1) {
    charge();/// tu charge ici
    n=0;
    } else {
    n++;
    }
    gotoAndPlay(2);// tu vas a l'image 2 et tu lis .est tu sur que tu as le bon texte (la bonne info) si le fichier n'est pas chargé le texte et un vieux texte et la nouvelle info arrivera image 30 par exemple le texte changera en plein défilement
    pas top.

    solution au prochain message

  8. #8
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    j'ai remis un exemple en ligne et tu peux avoir accès au fla

    http://www.citroen-france-tours-nord...manounours.htm

    je pense qu'il faut avoir a l'esprit que tu vas demander très et peut être trop régulièrement ton fichier XML au serveur.
    ce qui risque de le surcharger de demande ?

    ne faudrait-il pas plutôt recharger 1 fois tout les 5 minutes et dans ce cas la utiliser un timer?


    @+ gustave02

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    je répond juste a ton dernier post car je n'ai pas encore eu le temps de comprendre tes modifs.

    En fait ce script as3 n'est pas pour moi, mais pour ma boite. idée perso, on m’impose rien.
    Je bosse dans une espece de call center (mais je fais pas que celà). Au mur nous avons de grands écrans qui font de la surveillance réseau de divers magasins.
    Et il arrive de temps en temps qu'un gros soucis pour un magasin mette les autres en difficulté (pb réseau, serveur etc). impact financier etc...

    l'idée était d'inclure sur un de ses écran un "flash info" qui défilerait en continue et indiquerait a tous les techniciens le pb en cours qui vient d'apparaitre.
    il faut que l'info arrive rapidement, car tu imagines bien que dans un call center, ça n'appelle pas 5 min après que le pb soit arrivé mais bien avant.
    donc ce fichier xml serait alimenté par un service windows externe d'après nos propres infos que nous avons et le flash irait lire ce fichier xml, indiquerait par magasin le pb en cours etc.. un peu a la bfmtv tu vois ?

    le rechargement du fichier xml a chaque fin de lecture total est donc une nécessité, et ce fichier est sur la même machine qui fait tourner le flash.
    j'ai fait les tests hier soir, les bonnes infos arrivaient mais je n'ai pas tout essayé.

    de plus, au milieu du scénario, y a normalement une temporisation de 5 secondes le temps que l'info soit bien lu à l'écran donc sachant qu'en moyenne j'ai tjs 3 infos dans mon fichier ça fait un rechargement tous les 15 secondes environ.

    Merci,
    Emmanuel.

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    aussi avant que j'oublie.

    hormis les fonctions de maitrise du timeline (pause stop etc), le fait de poser un script sur une frame précise ne la déclenche pas seulement que la frame en question ??
    je pense notament a la frame2 avec son event "Event.ENTER_FRAME" cela ne voulait il pas signifier que dès que je suis sur la frame ou il y a l'event je fais l'action définit ?

    je sais que je suis plus newbie sur flash, je bosse plus sur vbs php mysql, et j'avoue des fois avoir un peu de mal au concept de l'as3

  11. #11
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    tu demandes
    hormis les fonctions de maitrise du timeline (pause stop etc), le fait de poser un script sur une frame précise ne la déclenche pas seulement que la frame en question ??
    je pense notament a la frame2 avec son event "Event.ENTER_FRAME" cela ne voulait il pas signifier que dès que je suis sur la frame ou il y a l'event je fais l'action définit ?


    addEventListener(Event.ENTER_FRAME, == Ajoute a la liste des événements a surveiller l’événement entrer frame( la frame étant le rafraichissement de l'image 24 fois par seconde par défaut)

    donc déplacement sur la timeline ou pas l’événement enterFrame existe

    dans ta fonction affichage met un trace("ok"); tu verras le nombre de fois que la fonction se réalise.

    dans le nouvel exemple j'ai viré ton enterframe
    @+ gustave02

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    merci de votre réponse.
    je vous tiens au courant de l'avancement du projet

    Cdlt,
    Emmanuel.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2015
    Messages : 7
    Points : 1
    Points
    1
    Par défaut
    Bonjour !

    Comme promis des news.
    Le projet a bien été finalisé, ça fonctionne au poil.

    Malheureusement dans ma boite, on n'en veux pas prétextant que flash c'est pourrie et que cela ne vaut rien.
    du coup ils veulent faire çà en java mais personne n'est motivé pour le faire.

    enfin pas grave, j'aurai appris quelque truc sympa dessus qui peut être un jour me serviront.

    Cdlt,
    Emmanuel.

  14. #14
    Membre actif Avatar de gustave02
    Homme Profil pro
    aucune
    Inscrit en
    Février 2013
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Février 2013
    Messages : 162
    Points : 225
    Points
    225
    Par défaut
    bonjour,
    tu dis "Malheureusement dans ma boite, on n'en veux pas prétextant que flash c'est pourrie et que cela ne vaut rien."

    c'est un jugement un peu dure pour flash. c'est vrai que html5 css java apporte beaucoup. mais pour de grosse anime flash reste une bonne solution.

    java et as3 étant très proche tu n'as pas perdu ton temps.
    @+gustave02

Discussions similaires

  1. Créer un site flash complet en AS3 et xml
    Par design7 dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 11/02/2010, 18h36
  2. [AS3] Wave Form, Timeline sous form spectre
    Par bolo dans le forum Flash
    Réponses: 2
    Dernier message: 16/05/2007, 17h59
  3. [AS3] Sérialisation Classe en XML
    Par goldorax113 dans le forum ActionScript 3
    Réponses: 6
    Dernier message: 25/11/2006, 17h43
  4. [AJAX] Réponse XML - Functions Javascript
    Par ..:: Atchoum ::.. dans le forum Général JavaScript
    Réponses: 24
    Dernier message: 24/01/2006, 03h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo