Lire xml en boucle

dymytry78 Messages postés 4 Date d'inscription samedi 23 décembre 2006 Statut Membre Dernière intervention 21 février 2007 - 18 févr. 2007 à 15:46
ninja0701 Messages postés 1 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011 - 21 janv. 2011 à 23:47
Bonjour, ca doit pas bien etre compliqué et pourtant j' y arrive pas . Voila j'ai recuperé un code pour lire dans mon animation flash un texte qui s'affiche ligne apres ligne a partir d'un fichier xml, le probleme c'est apres avoir affiché la derniere ligne du fichier xml l'animation se termine sur "undefined". Moi je voudrais que l'anim recommence au debut automatiquement comment faire?

le code que j'utilise:
var replique:Number = 0;
var dialogues:XML = new XML();
dialogues.load("soustitreslionel_2.xml");
dialogues.ignoreWhite = true;



sousTitrer = function () {
 if (b = dialogues.firstChild.childNodes[replique]);
  chaineCommentaire = new String(a.text);
  replique++;
 };
lancer = setInterval(sousTitrer, 2000);


Merci

Dymytry

4 réponses

Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 1
20 févr. 2007 à 20:56
var replique:Number = 0;
var dialogues:XML = new XML();
dialogues.load("soustitreslionel_2.xml");
dialogues.ignoreWhite = true;



sousTitrer = function () {
 if (b

=

= dialogues.firstChild.childNodes[replique]) {
  chaineCommentaire = new String(a.text);
  replique++;
 };
lancer = setInterval(sousTitrer, 2000);



Avant toute chose, il te manquait un = pour ta condition et remplacer le point virgule par l'accollade pour ouvrir le bloc de la condition ...
Pour savoir si tu te trouves à la fin du xml, tu peux récupérer la longueur du xml : dialogues.firstChild.length
Puis au lieu de mettre :  if (b == dialogues.firstChild.childNodes[replique]){
(dont j'ignore l'origine de B) mais faire ceci :
var longueur_xml    :Number    = dialogues.firstChild.length;
if(replique < longueur_xml){
    action à exécuter
    replique++;
}
( à vérifier, j'écris ça sans flash sous les yeux)

Il vaut mieux créer une variable qui contiendra le nombre de noeuds contenus dans le XML car ça évitera à flash de le recalculer toutes les 2 secondes


--------- Darkrats ---------

la loi est dure mais c'est la loi

 -------- Infograpix --------
0
dymytry78 Messages postés 4 Date d'inscription samedi 23 décembre 2006 Statut Membre Dernière intervention 21 février 2007
21 févr. 2007 à 18:52
Merci Darkrats mais je suis un peu gogol en code actionscripts et j'ys suis aps arrivé. J'ai ajouté le = et } mais il se passait plus rien ideme en remplacant  if (b == dialogues.firstChild.childNodes[replique]){ par ce que tu as proposé....

Des precisions qui sont peut etre utile a resoudre mon probleme: le a c'est le nom du champ texte et le b c'est le nom de la variable qu'il lui est affiliée. Le fichier soustitreslionel_2 fait 10 lignes.

Si quelqu'un peu me dire ou je me plante je suis preneur.

Merci
0
Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 1
23 févr. 2007 à 22:45
En fait, ce que tu dois donc savoir c'est quand ton xml est arrivé à la fin pour recommencer l'affichage depuis le début
Donc :
    1. une variable qui va indiquer à quel noeud on se trouve, appelons là "noeud_courant"
       var noeud_courant :Number = 0;
    2. une variable qui va indiquer combien de noeud possède ton xml
       var noeud_max   :Number   = dialogues.childNodes.length;  // (dialogue étant ton fichier xml correctement chargé)
    3. tu dois dans la fonction que tu lances en boucle, vérifier qu'on ne soit pas arrivé à la fin du xml avant de vouloir écrire le contenu
       function affichage_xml(){
          if(noeud_courant < noeud_max){
                // Le noeud courant n'est pas le dernier
                trace("contenu du noeud numéro " + noeud_courant);
                // Concaténation du noeud courant
                noeud_courant++;
          }else{
                // Le noeud est le dernier
                // On affiche rien mais on remet la valeur zéro au noeud courant pour qu'il puisse de nouveau écrire le contenu du xml depuis le début
               trace("fin du traitement du xml, remise à zéro");

                noeud_courant = 0;
       }
Il est possible que ça ne marche pas ... dans ce cas, utilise des traces pour savoir à quel endroit ça coince, ... par exemple, as-tu bien mes deux traces qui s'affichent au moment voulu ?
De plus, tu peux vérifier via des traces la valeur que prend
noeud_courant et noeud_max comme ça tu sauras si ta boucle fonctionne
bien.

Maintenant, comme tu me dis n'être pas fort en action script, je te recommenderais vivement de vérifier que ton xml est bien chargé avant de lancer ta fonction d'affichage. Je ne sais pas si tu es au courant qu'un xml ne se charge pas forcément entièrement avant de poursuivre le code ? ( plus d'explication sur ce site : media-box);

Fais quand même attention que ta fonction traîtée en boucle ne fasse pas planter flash par la lourdeur des actions à effectuer

--------- Darkrats ---------
la loi est dure mais c'est la loi
 -------- Infograpix --------
0
ninja0701 Messages postés 1 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 21 janvier 2011
21 janv. 2011 à 23:47
bonjour voici mon code xml qui affiche des image avec animation je désire afficher ce code en boucle répéter toujours les images si quelqu'un peut m'aider .merci


<?xml version= '1.0' encoding='UTF-8' ?>
<header_vars>
<graphics_color>FFFFFF</graphics_color>
no

<header>
<text_header_h1 x_pos="5" y_pos="55" size="19" letter_spacing="0" text_color="FFFFFF"></text_header_h1>
<text_header_h2 x_pos="10" y_pos="80" size="10" letter_spacing="1.9" text_color="FFFFFF"></text_header_h2>
images/your_image2.jpg
</header>
<header>
<text_header_h1 x_pos ="90" y_pos= "65" size="18" letter_spacing="1.5" text_color="FFFFFF"></text_header_h1>
<text_header_h2 x_pos="91" y_pos="85" size="11" letter_spacing="3.2" text_color="FFFFFF"></text_header_h2>
images/your_image3.jpg
</header>
<header>
<text_header_h1 x_pos ="10" y_pos= "10" size="23" letter_spacing="0" text_color="FFFFFF"></text_header_h1>
<text_header_h2 x_pos="50" y_pos="40" size="14" letter_spacing="5.4" text_color="FFFFFF"></text_header_h2>
images/your_image.jpg
</header>



<music_file loop ="no" music_control="no" play_music="no">sounds/music.mp3</music_file>
yes


<display_preload graphic_color="669ac6">yes</display_preload>
<replay display="yes" x_pos="493" y_pos="135" size="8" letter_spacing="1" bgd_color="FFFFFF" text_color="000000"> REPLAY</replay>
</header_vars>
0
Rejoignez-nous