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

Flash Discussion :

[FLASH MX2004 PRO] Ciblage dynamique dans boucle


Sujet :

Flash

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut [FLASH MX2004 PRO] Ciblage dynamique dans boucle
    Bonjour j'ai un petit soucis sur une boucle surun evenement sur un clip dynamique.
    J'ai 5 occurence de clip nommées "menu1" a "menu5"
    Je fais une boucle pour changer leur proriete _yscale et cela marche bien; mais comme je veux leur assigner un evenement de bouton, lorsque je clique dessus cela me retourne toujours "menu6" avec ma commande trace.
    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (var i=1; i<6; i++){
    _root["menu"+i]._yscale=10;
    // là pas de soucis
     
    _root["menu"+i].onRelease = function() {
    trace(["menu"+i]);
    // là cela me met tjrs "menu6"
    };
    }
    Quelqu'un voit t-il un probleme ?
    Merci

  2. #2
    Membre Expert Avatar de dom_dev
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 073
    Par défaut
    bonjour,
    ça me parait normal puisque tu execute ta fonction avec la variable i qui sort de la boucle et qui a pour valeur 6 !!
    :o

  3. #3
    Membre Expert Avatar de dom_dev
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 073
    Par défaut
    essaye ce test là par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (var i=1; i<6; i++){ 
    _root["menu"+i]._yscale=10; 
    // là pas de soucis 
     
    _root.sortie.text += ["menu"+i]+"\n";
    // mon champs texte s'appelle sortie (multiligne) 
     
    }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Par défaut
    Quand tu cliques, il évalue la variable i en fonction de sa valeur au moment du clic (comme le dit dom_dev).
    Si après ta boucle tu mets i=37
    et bien au clic il évaluera this["menu"+37]
    Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    this["menu"+i].no=i;
    this["menu"+i].onRelease = function()
    {
    trace(this._parent["menu"+this.no]); //équivalent à trace(this)
    }
    (this pas _root )

  5. #5
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    Bon, je suis un peu fatigué j'ai pas tous suivi là

    Je ne comprends pas pourquoi il m'évalue le "i" toujours à 6 alors qu'il devrait me mettre la valeur du "i courant".

    Voila ce que je cherche à faire :

    1. j'appuie sur un clip qui se nomme "menu1" à "menu5"

    2. avec la classeTween je fais une interpolation en _yscale

    ==> cela doit m'interpoler le menu courant ["menu"+i]
    ==> au passage : on peut faire une interpolation sur 2 propriétés à la fois ?

    3.suite a cela j'ai un texte sur un calque au dessus qui se nomme "texte_menu1" à "texte_menu5" ( ce texte charge des variables mais je pense pas que cela pose soucis)

    je veux que ce texte "["texte_menu"+i]" change de couleur apres l'interpolation.

    Et donc voici le code :

    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
    import mx.transitions.Tween;
    import mx.transitions.easing.*;
     
    for (var i=1; i<6; i++){
     
      _root["menu"+i]._yscale=10;	
      _root["menu"+i].onRelease = function(){
     
        ouvertureMenu = new Tween(this, "_yscale", Elastic.easeOut, 0, 100, 0.15,true);
        ouvertureFondY = new Tween(fond_blanc, "_yscale", Elastic.easeOut, 0, 100, 1,true);
        ouvertureFondX = new Tween(fond_blanc, "_xscale", Elastic.easeOut, 0, 100, 1,true);
     
    _root["texte_menu"+i].textColor=0x83BE2F;
    };
    }
    donc le menu que je clique s'interpole correctement, mais le texte ne change pas de couleur car il n'arrive pas a prendre la valeur du "i".

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Par défaut
    Tu remplaces :
    _root["texte_menu"+i].textColor=0x83BE2F;
    par :
    this.textColor=0x83BE2F;
    et c'est bon.

    Je recommence tout de même l'explication pour le i.
    Un exemple simple suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var i=5;
    function a() {trace(i);}
    i=3;
    a();
    i=654;
    a();
    Il te paraît normal qu'il soit affiché 3 puis 654 ?
    Et ben là c'est exactement pareil.

    Quand tu cliques il exécute ta fonction onRelease. Il exécute cette ligne :
    _root["texte_menu"+i].textColor=0x83BE2F;

    La valeur de i est la valeur de i au moment où il exécute cette ligne, comme dans mon exemple ci-dessus.

    Si tu veux utiliser la valeur au moment de la création fais comme j'ai fait dans mon post précédent.

  7. #7
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    avec le this cela ne marche pas...mon champs de texte qui s'appele par exemple "texte_menu1" ne se trouve pas dans un clip, il est sur un calque a part et je le cible comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _root.texte_menu1.textColor=0x83BE2F;
    J'arrive pas a comprendre comment recuperer la valeur de depart, meme avec ton exemple.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 13
    Par défaut
    oops je n'ai pas fait attention (j'ai fait comme si le onRelease était défini sur le champ, ce qui n'est pas possible).
    J'ai lu trop vite.

    Alors fais plutôt dans le onRelease :
    _root["texte_menu"+this.no].textColor=0x83BE2F;
    avec le this.no comme j'avais mis plus haut.

    ou alors fais :
    _root["menu"+i].champ=_root["texte_menu"+i];
    _root["menu"+i].onRelease=function() {
    //...
    this.champ.textColor=0x83BE2F;
    }

    (idéalement, il faudrait éviter les _root)

  9. #9
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    je te remercie cela marche bien ;-)

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/12/2006, 07h54
  2. [FLASH MX2004 PRO] Texte dynamique vertical
    Par guy2004 dans le forum Flash
    Réponses: 10
    Dernier message: 09/03/2006, 16h35
  3. Réponses: 2
    Dernier message: 28/02/2006, 15h54
  4. Réponses: 5
    Dernier message: 23/02/2006, 10h43
  5. [FLASH MX2004 Pro] Textes dynamiques et effets
    Par djo.mos dans le forum Flash
    Réponses: 1
    Dernier message: 25/09/2005, 12h04

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