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 1 & ActionScript 2 Discussion :

onLoad et la boucle for


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut onLoad et la boucle for
    Bonjour à tous.
    J'ai un problème dans mon script. Les clips logo1, logo2... logo12 sont bien crées dans le clip LOGOS (confirmé par le débogueur). Ils s'affichent correctement mais la fonction LOGO.onLoad ne répond pas (confirmé par le débogueur). Cette fonction devrait s'exécuter à chaque itération de la boucle, c'est à dire pour les clips logo1, logo2... logo12. Je pense qu'il y a un problème avec la boucle for qui s'exécute entièrement avant que la fonction LOGO.onLoad soit exécutée. J'ai mis en rouge la partie qui coince... Ce qu'il y a après n'est pas important. Si quelqu'un a une réponse, merci de m'aider.
    Voici le script :

    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
    var liste:LoadVars = new LoadVars();
    liste.load("liste.txt");
     
    // Script exécuté lorsque la variable liste est chargée
    liste.onLoad = function() {
        _root.createEmptyMovieClip("LOGOS",1);
        for(var n=1;liste["nom"+n]; n++) {
            var LOGO = _root.LOGOS.createEmptyMovieClip("logo"+n,n);
            LOGO.loadMovie("im_logos/"+liste["nom"+n]);
            LOGO._x = 100*n;
            trace(liste["nom"+n]);
     
            // Script exécuté lorsque l'objet LOGO est chargé
            LOGO.onLoad = function() {
                if((LOGO.getBytesTotal() > 0) && (LOGO.getBytesLoaded() >= LOGO.getBytesTotal())) { trace(LOGO.getBytesTotal()); }
                trace(LOGO.getBytesTotal());
     
                // Script exécuté lorsque la souris passe sur l'objet imgObj
                LOGO.onRollOver = function() {
     
                    // Script exécuté en boucle à chaque nouvelle frame
                    this.onEnterFrame = function() {
                        if(this._alpha > 40) {
                            this._alpha -= 30;
                            this._width += 15;
                        } else {
                            delete onEnterFrame;
                            this.onEnterFrame = function() {
                                if(this._alpha < 100) {
                                    this._alpha += 10;
                                    this._width -= 5;
                                } else {
                                    delete this.onEnterFrame;
                                }
                            }
                        }
                    }
                }
            }
        }
        factor = (_parent._width-978) / 978;
    }

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 37
    Points : 46
    Points
    46
    Par défaut
    LOGO.onLoad le fonctionnera pas pour un load movie.

    tu as la reponse dans ton script. le seul moyen de controler le chargement d'un clip c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if((LOGO.getBytesTotal() > 0) && (LOGO.getBytesLoaded() >= LOGO.getBytesTotal())) { trace(LOGO.getBytesTotal()); }
    il suffit juste de boucler cette ligne avec setinterval

    oublie le onload.

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Toujours pas...
    Merci uowis.
    Effectivement le onLoad a l'air de poser problème ici. Mais si je ne mets rien, la valeur de LOGO.getBytesTotal est égale à 0 car le clip n'est pas encore chargé au moment où j'évalue sa valeur. Je ne peux donc pas travailler sur ce clip. J'ai aussi essayé LOGO.onEnterFrame afin d'effectuer des actions sur LOGO lorsque LOGO.getBytesLoaded == LOGO.getBytesTotal , mais ça ne marche pas mieux... La boucle for est exécutée dans sa totalité et ensuite l'événement LOGO.onEnterFrame est exécutée à son tour.
    Vraiment, je bug.

  4. #4
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Bonjour,

    pour gérer le chargement d'un clip il vaut mieux utiliser MovieClipLoader et l'évènement onLoadInit.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 37
    Points : 46
    Points
    46
    Par défaut
    J'apprends des trucs en même temps

    donc oui je confirme ne fais pas un setinterval pour controler l'avancement du chargement de clip.

    Un onLoadInit est bien mieux. Recherche dans l'aide (F1) il y des bons exemples.


    Merci beekeep

  6. #6
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Je ne suis pas expert en actionscript et j'ai du mal à saisir la différence.
    En tout cas, dans mon script, MovieClipLoader et l'évènement onLoadInit provoquent le même effet... Le script passe directement à l'itération suivante et n'attend pas que onLoadInit soit vérifié. Je ne peux toujours pas travailler sur mon objet LOGO. J'ai l'impression que c'est ma boucle for qui foire tout.
    Je ne peux pas abandonner comme ça... Je sais que la solution est en vous. Vous avez l'air drôlement experts.

    PS. C'est un script pour lire des images jpg, png et gif dans un dossier externe. Ces images sont affichées dans l'animation flash.

  7. #7
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Citation Envoyé par julienlecaro Voir le message
    Le script passe directement à l'itération suivante et n'attend pas que onLoadInit soit vérifié. Je ne peux toujours pas travailler sur mon objet LOGO.
    c'est un fonctionnement asynchrone, tu ne peux accéder à ton clip que lorsqu'il est chargé, donc lorsque l'évènement loadInit est déclenché.

    c'est donc dans la méthode onLoadInit que tu peux utiliser ton clip, accessible par le paramètre (ici target_mc).

    voici un exemple d'utilisation de la classe MovieClipLoader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var mcContainer = this.createEmptyMovieClip("container", this.getNextHighestDepth());
    var mclListener = new Object();
    mclListener.onLoadInit = function(target_mc) 
    {
      trace(target_mc);
    }
    var mcl = new MovieClipLoader();
    mcl.addListener(mclListener); 
    mcl.loadClip("test.swf", mcContainer);
    essayes de le mettre en place et si tu as des questions on est la.

  8. #8
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé ce code mais toujours pas... Il ne lit pas l'instruction de la fonction onLoadInit (confirmé par le débogueur). Il passe toujours directement à l'itération suivante.

    Citation Envoyé par beekeep Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var mcContainer = this.createEmptyMovieClip("container", this.getNextHighestDepth());
    A quoi sert-il ce clip ? On n'a pas l'air de l'utiliser dans ton script...

    Citation Envoyé par beekeep Voir le message
    A quoi sert ce paramètre ?

    Citation Envoyé par beekeep Voir le message
    essayes de le mettre en place et si tu as des questions on est la.
    Vous êtes super sympa !

  9. #9
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Pb de boucle et non pas de onLoad
    En fait tout ce que vous proposez marche. Mais lorsque l'on place ce script dans une boucle for (ou tout autre boucle), cette boucle va s'effectuer intégralement avant de lire les onLoadInit. Et lorsque la boucle est terminée, le sript continue de lire ce que qui est à l'extérieur de la boucle et zap donc les onLoadInit. J'ai bien contrôlé tout ça avec le débogueur. Je suis pourtant obligé de conserver cette boucle car je vais avoir un nombre important et variable d'images. Si vous avez des solutions pour résoudre ce pb de boucle et non pas de onLoadIntit qui marche effectivement bien (tout comme onLoad), je suis tout ouie.

  10. #10
    Futur Membre du Club
    Inscrit en
    Novembre 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Ok c'est bon. L'erreur est encore une fois humaine. Je n'ai pas utilisé le container. Pour moi, le MovieClipLoader était mon MovieClip. Or le MovieClipLoader doit être placé dans le MovieClip. Et je n'utilisais pas correctement le target_mc. Compliqué tous ces termes...
    Merci pour votre aide.

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 16h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 10h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 19h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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