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 :

Preloader un fichier xml


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Par défaut Preloader un fichier xml
    Bonjour et Bonne année 2009 à tous !

    Je rame sur un sujet pourtant vu et revu : les preloader.
    En fait, je charge via une boucle for, dans un loader, des fichiers swf, lesquels sont listés dans un fichier xml.
    Lorsque j'intègre un preloader, celui-ci ne sert à rien car il preload un loader qui ne pèse quasiment rien.
    J'ai essayé pleins de combinaisons différentes, mais rien ne fonctionne.
    Je vous joins mon code, auriez-vous une idée pour m'aider ??? et Mille mercis par avance.

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    var listeAnimation:Array = [ "animation1.swf", "animation2.swf", "animation3.swf", "animation4.swf", "animation5.swf", "animation6.swf", "animation7.swf" ];
    var loader:Loader;
    var requete:URLRequest;
    var positionY = 120;
    var prechargeur:Prechargeur ;
     
    for (var i=0; i<listeAnimation.length; i++)
    {
    	loader = new Loader ();
    	requete = new URLRequest ( "anim/"+ listeAnimation [i] );
    	loader.y = i* positionY ;
     
    	prechargeur = new Prechargeur(); 
     
    	prechargeur.x = Math.round ( (stage.stageWidth - prechargeur.width) / 2); 
       	prechargeur.y = Math.round ( (stage.stageHeight - prechargeur.height) / 2); 
     
    	loader.load (requete);
    	addChild (loader);
     
    	this.loaderInfo.addEventListener ( Event.OPEN, chargementDemarre ); 
       	this.loaderInfo.addEventListener ( ProgressEvent.PROGRESS, chargementEnCours ); 
       	this.loaderInfo.addEventListener ( Event.COMPLETE, chargementTermine );  
     
    		function chargementDemarre (e:Event) 
    	{
    			if ( !contains ( prechargeur ) ) addChild ( prechargeur );
    			this.loaderInfo.removeEventListener ( Event.OPEN, chargementDemarre ); 
    	}
     
    	function chargementEnCours (e:ProgressEvent) 
    	{
    		prechargeur.scaleX = e.bytesLoaded / e.bytesTotal;
    	   	this.loaderInfo.removeEventListener ( ProgressEvent.PROGRESS, chargementEnCours ); 
    	}
     
    	function chargementTermine (e:Event) 
    	{
    		if ( contains ( prechargeur ) ) removeChild ( prechargeur ); 
    	   	this.loaderInfo.removeEventListener ( Event.COMPLETE, chargementTermine );  
    	}
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Creative Technologist
    Inscrit en
    Avril 2007
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Creative Technologist

    Informations forums :
    Inscription : Avril 2007
    Messages : 126
    Par défaut
    Ouah la vache... t'as tout mélangé...

    Tout d'abord tu fais tes déclarations de fonctions pour les écouteurs d'événements (chargementEnCours, chargementTermine...) à l'intérieur même de ta boucle for... ce n'est pas leur place... elles doivent être en dehors.
    Cela supposerait en effet, si tu les mets à l'intérieur, que tu les déclares autant de fois que la boucle effectue d'itération, ce qui n'est évidemment pas ce que tu cherches à faire.

    Ensuite, à chaque itération de ta boucle, tu recrées loader, avec un new Loader(). L'ancien loader n'existe alors plus, il est écrasé, remplacé. Et nécessairement, il ne peut pas renvoyer d'événement. Ni rien charger non plus d'ailleurs.

    Ensuite, je ne vois pas très bien ce que peut être ta classe Prechargeur, ni à quoi elle te sert. J'imagine que c'est une sorte de barre de progression?

    Enfin, tu ajoutes tes écouteurs d'événements non pas sur le loader (ce qui devrait être le cas) mais sur this. Or this, est l'objet où tu te trouves... c'est à dire ton application, pas le loader. Et ton application est déjà chargée, puisque tu es en train d'en exécuter le code. Elle ne déclenche donc pas d'événements de chargement...

    Si tu lances tes chargements par une boucle, tu dois créer autant de loader que de chargements (normal). Tu devrais donc avoir par exemple un Array, dans lequel tu stockes tes Loader...
    genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var loaderList:Array = new Array();
    ...
    for (i...) {
        loaderList[i] = new Loader();
        ...
        loaderList[i].loaderInfo.addEventListener( myEvent, myFunction );
        ...
    }
     
    function myFunction( myEvent ) ...
    enfin bon, un truc qui ressemble.

    En fait, tu ne peux pas véritablement maîtriser ce genre de développement si tu n'as pas bien compris la structure d'un langage objet. A un moment donné, de toute manière, il va falloir que tu apprennes correctement comment programmer orienté objet. C'est un peu le même problème, différemment, que celui que tu avais eu avec les fonctions dans un tableau... tu confonds l'objet, son nom, sa référence...

    Ce serait trop long ici de t'expliquer tout ce qui ne va pas dans ton code. Je pourrais te donner le code correcte, mais ça ne te servirait à rien si tu ne le comprends pas. Et puis il faudrait à nouveau recommencer pour un futur problème...

    Lis (ou relis) le chapitre de la doc:
    http://help.adobe.com/fr_FR/ActionSc...0204-7ec0.html
    Et exerce-toi sur la classe Array avec de petits exercices.
    De toute manière tu n'y couperas pas...

    Si la doc ne te parles pas, pose-nous alors des questions sur ce que tu n'as pas compris...
    Bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 41
    Par défaut
    Salut !
    Merci beaucoup David pour ton temps, c'est vraiment sympa.
    Effectivement, j'ai commencé l'apprentissage de l'Action Script depuis 4 mois, et je rame beaucoup !! Honteusement, je t'avouerai que j'ai suivi un cours d'initiation et de poo, mais je n'ai pas bien compris de ce second cours. Rien ne vaut la pratique j'imagine et des bons conseils de temps en temps ...
    En tout cas, j'ai bien compris tes explications (elles vont résoudre quelques problèmes que je rencontrai jusque là), et je vais continuer à potasser les doc dont tu me parles.
    Merci encore pour ton aide,
    Très bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recuperation du fichier xml
    Par Geulderack dans le forum XMLRAD
    Réponses: 10
    Dernier message: 28/02/2003, 11h06
  2. Insertion dans un fichier XML
    Par [DreaMs] dans le forum XMLRAD
    Réponses: 4
    Dernier message: 27/02/2003, 17h16
  3. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  4. [Kylix] Composant IBM pour fichiers XML
    Par Mister Nono dans le forum EDI
    Réponses: 1
    Dernier message: 29/09/2002, 20h28
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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