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 :

Boutons et variables en as2


Sujet :

ActionScript 1 & ActionScript 2

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Boutons et variables en as2
    Bonjour,

    Je suis plus que moyen en as2 et je serai le plus heureux des hommes si l'on m'aidait à y voir clair dans un cas - pour moi - complexe.
    Voici la description de mon animation (assez simple dans le principe) :

    - la page est divisé en deux par des emptymovieclip qui contiennent des clips chargés par des attachmovie ;
    - la partie de gauche est constituée de boutons qui appellent les clips de la partie de droite ;
    - le principe est tout à fait fonctionnel (testé sans ce qui pose problème, à savoir.

    MAIS :

    - comme les boutons appellent des clips quasi identiques, je cherche à réaliser une gestion de variable permettant de n'avoir qu'une seule fois la fonction attachmovie, implémentée par les variables. Et là, rien à faire, je n'y parviens pas.
    Voici ce que j'ai essayé.

    1/création de boutons avec des variables :

    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
    //boutons avec variable
    var clip:String
    var clipcree:String
     
     
     
    clipmenu.barremenu.boutonY.onRelease=function(){
       clip = "clip_Y";
       trace (clip); //COMMENTAIRE : ici les trace fonctionnent bien
       clipcree = "Y";
       trace (clipcree);
       chargerclip;
    }
     
    clipmenu.barremenu.boutonX.onRelease=function(){
       clip = "clip_X";
       clipcree = "X";
       chargerclip;
    }
    2/appel de la fonction "chargerclip" :

    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
     
    //fonction appelée par les boutons
    function chargerclip () {
       trace (clip); //COMMENTAIRE : ici les trace ne fonctionnent pas, la fonction non plus
       trace (clipcree);
       trace ("bon");
       contener.attachMovie("clip","clipcree",contener.getNextHighestDepth());
     
       var tween_handler:Tween = new Tween(contener.clipcree, "_alpha", Strong.easeIn, 0, 100, 20, false);
       tween_handler.onMotionFinished = function() {
     
    	var avantderniereprof:Number = contener.getNextHighestDepth() - 2;
    	var avantdernierclip:MovieClip = contener.getInstanceAtDepth(avantderniereprof);
    	trace (avantdernierclip);
    	trace (avantderniereprof);
    	(avantdernierclip).removeMovieClip();
    	contener.clipcree.swapDepths(0)
    	trace (contener.clipcree.getDepth());
            };
    NB : elle n'est pas entière ici car il y a un bouton dans chaque clip appelé - j'ai préféré faire un envoi light pour ne pas rendre fou le visiteur !

    Je ne sais pas si ma logique est bonne, mais j'avais tenter des if ; if else... qui ne donnaient rien non plus...

    Quelqu'une ou quelqu'un a-t-il Ze solution au problème ?

    Merci beaucoup,

    Cyril

  2. #2
    Membre régulier
    Homme Profil pro
    Concepteur multimédia
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Concepteur multimédia
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Points : 87
    Points
    87
    Par défaut
    Salut, essaye avec ça :

    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
    clipmenu.barremenu.boutonY.onRelease = function() {
    	chargerclip("clip_Y", "Y");
    };
     
    clipmenu.barremenu.boutonX.onRelease = function() {
    	chargerclip("clip_X", "X");
    };
     
     
    //fonction appelée par les boutons
    function chargerclip(clip:String, clipCree:String) {
    	trace(clip);//COMMENTAIRE : ici les trace ne fonctionnent pas, la fonction non plus
    	trace(clipcree);
    	trace("bon");
    	contener.attachMovie(clip,clipcree,contener.getNextHighestDepth());
     
    	var tween_handler:Tween = new Tween(contener.clipcree, "_alpha", Strong.easeIn, 0, 100, 20, false);
    	tween_handler.onMotionFinished = function() {
     
    		var avantderniereprof:Number = contener.getNextHighestDepth() - 2;
    		var avantdernierclip:MovieClip = contener.getInstanceAtDepth(avantderniereprof);
    		trace(avantdernierclip);
    		trace(avantderniereprof);
    		(avantdernierclip).removeMovieClip();
    		contener.clipcree.swapDepths(0);
    		trace(contener.clipcree.getDepth());
    	};
    }
    Tu me diras si ça fonctionne.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Bluffant !
    Génial, merci beaucoup.
    Ca fonctionne en tout cas quand c'est tout seul et que je simplifie mon anim. Je vais remettre de la complexité petit à petit et voir où ça ne va pas.
    Mais je pense que le plus dur est fait !
    La logique était évidente pour qui réfléchit un peu : mettre les variables dans la fonction !

    Merci encore.

    Cyril

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Y'a encore queque chose qui cloche là d'dans
    Me revoilà.
    Je suis encore coincé.
    Il y a un truc qui ne veut pas se résoudre.

    Jusqu'à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contener.attachMovie("clip","clipcree",contener.getNextHighestDepth());
    ça marche sans problème : le clip se charge.
    Par contre après, il y a un os : le tween ne fonctionne pas (pas de fondu enchaîné). Et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contener.clipcree.swapDepths(0)
    ne renvoie rien ! C'est bizarre.
    J'ai essayé de décrire les variables en tant que MovieClip au lieu de String, c'est encore pire : le clip ne se charge pas !

    De même, la description du bouton "zoneclic" qui se trouve dans contener.clipcree ne fonctionne pas.
    Mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    contener.clipcree.zoneclic.onRollOver=function(){
    	trace("test1"); 
    	contener.Y.gotoAndPlay("roll");
    }
    renvoie : undefined
    Comme si contener.clipcree n'existait pas !
    Encore une fois, je suis coincé. Il doit y avoir une astuce, mais je tourne autour sans y parvenir !

    Si vous avez une idée, je suis preneur !

    Merci beaucoup !

    Cyril

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut une piste
    Je crois avoir compris d'où vient le problème : une fois qu'on a appelé le clipCree, avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());

    il prend le nom de sa variable (ici, X ou Y) et du coup n'est plus reconnu comme "clipCree".
    Par contre, je ne vois pas comment solutionner ce problème...
    Si quelqu'un voit une solution, merci carrément d'avance !

    Cyril

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut A devenir dingue
    Suite du feuilleton :

    j'ai eu une idée, j'ai créé une variable pour conserver le nom du movieclip :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function chargerclip(clip:String, clipCree:String) {
    	trace(clip);
    	trace(clipCree);
    	var nomclipCree = clipCree;
    	contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());
    	trace(nomclipCree);
     	trace(contener.nomclipCree);
    Mais ça ne marche pas.
    trace(clipCree) donne Y
    trace(nomclipCree) donne aussi Y
    mais trace(contener.nomclipCree) donne undefined

    Sacrebleu !

  7. #7
    Membre régulier
    Homme Profil pro
    Concepteur multimédia
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Concepteur multimédia
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Points : 87
    Points
    87
    Par défaut
    Salut,
    - les variables déclarées dans les fonctions et dans les blocs de code en général ne sont pas utilisables en dehors.
    - les propriétés des clips (qui ressemblent un peu à des variables si on est large), elles, sont accessibles depuis n'importe où à condition d'indiquer le chemin du clip qui la contient.

    Par exemple si tu as une propriété "numero" dans un clip nommé "clip", tu y accèdes en faisant clip.numero...

    En gros :
    var maVariable:String = "blablabla" est complètement différent de
    monClip.maVariable = "blablabla".
    La première est une variable, la deuxième une propriété.

    En fait, tout dépend de ce que tu veux faire, il manque quelques données?
    Tu veux stocker cette variable dans le clip que tu crée, tu veux stocker cette variable de manière globale, car elle ne peut avoir qu'une seule valeur pour chaque attachMovie ?

    D'autre part, il faut différencier une chaine de caractères d'un nom de clip (qui est une chaine de caractères)

    Si tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var nom:String = "monClip";
    trace(this.nom) // te retourne la chaine "monClip"
    // Si tu veux accéder au clip ou a une de ses propriétés :
    this.nom._x = 10; // te retourne une erreur
    this[nom]._x = 10; // ne te retourne pas d'erreur et met le clip "monClip" à 10 en x.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Merci grandement pour ces précisions !
    Je vais de ce pas tenter de suivre la logique pour voir si je peux m'y retrouver !
    Je vous tiens au courant !

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut toujours pas...
    Hello !
    Soit je n'ai pas compris, soit le problème est plus complexe.
    Je vais essayer de répondre aux questions :

    Tout d'abord, voilà le code qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function chargerclip(clip:String, clipCree:String) {
    	trace(clip);
    	trace(clipCree);
     
    	contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());
    	trace(clipCree);
     
     	trace(contener.clipCree);
    Grâce à ta première intervention, les variables fonctionnent.
    Par contre, voilà le hic :

    trace(clip) renvoie bien clip_Y
    trace(clipCree) renvoie bien Y aussi bien avant que après le attachmovie
    MAIS
    trace(contener.clipCree) ne renvoie rien (undefined)
    Pourtant le clip existe ! Je le vois bien en utilisant le débogueur !

    Du coup, je ne peux pas effectuer les opérations sur ce clip : un fondu en entrée et ensuite un passage en z = 0.

    Tu me demandes par ailleurs :
    "Tu veux stocker cette variable dans le clip que tu crée, tu veux stocker cette variable de manière globale"
    Je pense qu'elle change à chaque clic bouton. Donc pas globale. Mais je peux me tromper !

    Pour éclaircir, voici le code en entier (jusqu'à la gestion en roll du bouton se trouvant dans le clip, pour ne pas faire trop long) :

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import mx.transitions.Tween;
    import mx.transitions.easing.*;
     
    //création menu : positionné à gauche
    this.createEmptyMovieClip("clipmenu",1000);
    clipmenu._x = 85;
    clipmenu._y = 360;
    clipmenu.attachMovie("menu","barremenu",1001);
     
    //création conteneur des clips appelés par les boutons du menu : à droite
    this.createEmptyMovieClip("contener",0);
    contener._x=575;
    contener._y=360;
    contener.attachMovie("fondgeo","newclip",1);
    new Tween(contener, "_alpha", Strong.easeIn, 0, 100, 20, false);
     
     
    //gestion boutons (d'après ton code)
    clipmenu.barremenu.boutonY.onRelease = function() {
    	chargerclip("clip_Y", "Y");
    };
     
    clipmenu.barremenu.boutonX.onRelease = function() {
    	chargerclip("clip_X", "X");
    };
    //etc. (il y a 28 boutons)
     
    //fonction appelée par les boutons
    function chargerclip(clip:String, clipCree:String) {
    	trace(clip);
    	trace(clipCree);
    	contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());
    	trace(clipCree);
     	trace(contener.clipCree);
    	var tween_handler:Tween = new Tween(contener.clipCree, "_alpha", Strong.easeIn, 0, 100, 20, false);
    	tween_handler.onMotionFinished = function() {
     
    		var avantderniereprof:Number = contener.getNextHighestDepth() - 2;
    		var avantdernierclip:MovieClip = contener.getInstanceAtDepth(avantderniereprof);
    		trace(avantdernierclip);
    		trace(avantderniereprof);
    		(avantdernierclip).removeMovieClip();
    		contener.clipCree.swapDepths(0);
    		trace(contener.clipCree.getDepth());
    	};
     
    contener.clipCree.zoneclic.onRollOver=function(){
    trace("test1"); 
    contener.Y.gotoAndPlay("roll");
    }
     
    contener.clipCree.zoneclic.onRollOut=function(){
    trace("test2"); 
    contener.Y.gotoAndPlay("off");
    }
    }
    Jusque

    contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());

    ça marche !

    Mais après, "contener.clipCree" semble ne plus exister. Du coup, pas de fondu, pas de changement de profondeur, pas de création du bouton. J'ai essayé de mettre clipCree entre crochets (contener.[clipCree]), ça me renvoie une erreur.

    Désolé, je pense que ça ne doit pas être compliqué, mais je rame !

    Merci !

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Encore moi

    J'ai poussé un peu la réflexion, en simplifiant.

    J'ai testé en passant les éléments bouton, clip et clipCree dans des variables simples, ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //bouton avec variable
    var clip:String = "clip_Y"
    var clipCree:String = "Y"
    var bouton:String = "boutonY"
     
    trace (bouton)
     
    clipmenu.barremenu.bouton.onRelease = function()
    {contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());
    C'est pas mieux : la ligne

    clipmenu.barremenu.bouton.onRelease = function()

    ne comprend pas que bouton c'est boutonY. Evidemment le reste non plus ne passe pas...
    J'ai essayé entre crochets, entre guillemets, entre crochets + guillemets, rien à faire !

    C'est à devenir fou. Une âme sensible a-t-elle une bonne idée ?

    Merci encore !

    Cyril

  11. #11
    Membre régulier
    Homme Profil pro
    Concepteur multimédia
    Inscrit en
    Février 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Concepteur multimédia
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2012
    Messages : 55
    Points : 87
    Points
    87
    Par défaut
    Salut, en fait, c'est ce que j'ai essayé de t'expliquer plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    barreMenu.bouton.onRelease = function() {
     
    }
    ne fonctionne QUE SI "bouton" est un clip, et pas une variable.
    Si tu veux faire un onRelease sur la variable "bouton" dans une boucle, il faut faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // bouton étant ici une variable dont la valeur change en fonction par exemple du nombre de boutons
    var bouton:String = "bouton_1";
    barreMenu[bouton].onRelease = function() {
        // ton code ici qui sera activé quand bouton_1 dans barreMenu sera relaché
    }
     
    // Dans le cas suivant, on imagine que sur la scène, tes boutons sont nommés monBouton_1, monBouton_2, ..., monBouton_n.
    barreMenu["monBouton_"+i].onRelease = function() {
        // ton code ici qui sera activé quand un bouton de la liste sera relaché
    }
    Voilà, j'espère avoir été plus clair.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut
    Houlala ! J'étais sûr de passer à côté de ton explication !

    En fait, quand j'essayais entre crochets, je gardais le point ! Du coup, rien à faire !

    Mais alors, du coup, est-ce que ça va fonctionner avec un attachmovie ?
    Exemple dans mon code, avec les variables que tu m'avais conseillé de créer dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function chargerclip(clip:String, clipCree:String) {
    , ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contener.attachMovie(clip,clipCree,contener.getNextHighestDepth());
    devient-il :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contener.attachMovie([clip][clipCree]contener.getNextHighestDepth());
    ?

    Je vais tester...

    Merci !!!!

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Novembre 2012
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2012
    Messages : 23
    Points : 7
    Points
    7
    Par défaut Ca marche, ça marche, ça marche !
    Ou plutôt : ça fonctionne !

    Merci beaucoup !

    Cyril

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

Discussions similaires

  1. import texte via variable url (AS2)
    Par rduvrac dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 02/11/2009, 10h18
  2. [formulaire] bouton hyperlink variable
    Par Guillaume 78 dans le forum IHM
    Réponses: 1
    Dernier message: 20/08/2008, 11h22
  3. Bouton avec variable php
    Par fepagaf dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/09/2007, 10h08
  4. [débutant] plusieur bouton -> plusieur variable ?
    Par cyrill.gremaud dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 03/11/2006, 15h27
  5. couleur Bouton selon variable d'url
    Par hisy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/04/2006, 11h23

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