Menu deroulant vertical problèmes [Résolu]

Signaler
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
26 mai 2008
-
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
26 mai 2008
-
Bonjour à tous, je suis débutant en flash et dans le cadre d' un stage je souhaiterai faire un menu en flash. J'ai reussi a faire un menu à peut près fonctionnel seul quelques problèmes subsites je m'explique. L'orsque je clique sur un bouton son sous menu apparait en decalant les boutons du dessous. Lorsque je reclique sur ce bouton le sous menu remonte et les boutons aussi jusque la tout va bien. Par contre si je clique sur un autre bouton lorsque un sous menu est déroulé cela doit faire remonté le sous menu et les bouton avec et derouler le nouveau sous menu cela marche sauf si je reclique sur ce meme bouton cela devrais faire remonter le sous menu que je vien de demander d'etre deroulé mais nan cela me decale tous les boutons. Etant débutant et ne connaissant pas très bien l'actionscript pour faire mes controle j'ai utilisé les position en dur des boutons c'est a dire monbouton._y= XXX; et j'ai pu remarquer que soit je m'exprimais mal au niveau de mon controle soit les positions en dur ne sont pas très fiables.

pour plus de clarté dans mes explication je vous join mon code en AS bon c'est loin d'etre un super code mais bon ca fait a peut près ce que je souhaite.  Si vous préférez mon fichier .fla faites moi signe. Par contre je ne cherche pas a ce qu'on me fasse tout et qu'au final je n'aprenne rien ca me tiens vraiment a coeur d'arriver a faire ce menu en entier.  Voila en ésperant  que vous pourrez m'aider, merci d'avance.

Stop();
i=0;
j=1;
k=1;
l=1;
m=1;
n=1;
initfamille=famille._y;
initevenements =evenements._y;
initactivites=activites._y;
initjeunesse=jeunesse._y;
initaccompagnement=accompagnement._y;

sous_menu1._visible = false;
sous_menu2._visible = false;
sous_menu3._visible = false;
sous_menu4._visible = false;
sous_menu5._visible = false;
Baisser_menu = function()
{
    evenements._y = evenements._y + 66;
    activites._y = activites._y + 66;
    jeunesse._y = jeunesse._y + 66;
    situer._y = situer._y + 66;
    maison._y = maison._y + 66;
    accompagnement._y = accompagnement._y +66;
}

Monter_menu = function()
{   
        evenements._y = evenements._y - 66;
        activites._y = activites._y - 66;
        jeunesse._y = jeunesse._y - 66;
        situer._y = situer._y - 66;
        maison._y = maison._y - 66;
        accompagnement._y = accompagnement._y -66;
}
Baisser_menu2 = function()
{
    activites._y = activites._y + 132;
    jeunesse._y = jeunesse._y + 132;
    situer._y = situer._y + 132;
    maison._y = maison._y + 132;
    accompagnement._y = accompagnement._y +132;
}

Monter_menu2 = function()
{   
        activites._y = activites._y - 132;
        jeunesse._y = jeunesse._y - 132;
        situer._y = situer._y - 132;
        maison._y = maison._y - 132;
        accompagnement._y = accompagnement._y -132;
}

Baisser_menu3 = function()
{
    jeunesse._y = jeunesse._y + 66;
    situer._y = situer._y + 66;
    maison._y = maison._y + 66;
    accompagnement._y = accompagnement._y +66;
   
}
Monter_menu3 = function()
{   
        jeunesse._y = jeunesse._y - 66;
        situer._y = situer._y - 66;
        maison._y = maison._y - 66;
        accompagnement._y = accompagnement._y -66;
}

Baisser_menu4 = function()
{
   
    situer._y = situer._y + 44;
    maison._y = maison._y + 44;
    accompagnement._y = accompagnement._y +44;
   
}
Monter_menu4 = function()
{   
       
        situer._y = situer._y - 44;
        maison._y = maison._y - 44;
        accompagnement._y = accompagnement._y -44;
}

Baisser_menu5 = function()
{
   
    situer._y = situer._y + 88;
    maison._y = maison._y + 88;
   
   
}
Monter_menu5 = function()
{   
       
        situer._y = situer._y - 88;
        maison._y = maison._y - 88;
       
}

Afficher_SousMenu1 = function()
{
    sous_menu1._visible = true;
    sous_menu1.gotoAndPlay(2);
   
}
Afficher_SousMenu2 = function()
{
    sous_menu2._visible = true;
    sous_menu2.gotoAndPlay(2);
}
Afficher_SousMenu3 = function()
{
    sous_menu3._visible = true;
    sous_menu3.gotoAndPlay(2);
}

Afficher_SousMenu4 = function()
{
    sous_menu4._visible = true;
    sous_menu4.gotoAndPlay(2);
}

Afficher_SousMenu5 = function()
{
    sous_menu5._visible = true;
    sous_menu5.gotoAndPlay(2);
}

famille.onPress=function()
{   

    if (j == 1)
    {
    Afficher_SousMenu1();
    Baisser_menu();
    }

    if (j == 2)
    {
   
    sous_menu1._visible = false;
    Monter_menu();
    }
   
    if (j>1)
   
    {
    j=0;
    }
}
famille.onRelease=function()
    {
   
    j=j+1;
   
    }
   
evenements.onPress=function()   
{   
    if (k == 1)
    {
    Afficher_SousMenu2();
    Baisser_menu2();
    }

    if (k == 2)
    {
   
    sous_menu2._visible = false;
    Monter_menu2();
    }
   
    if (k>1)
    {
    k=0;
    }
    if(evenements._y >97)
        {
        Monter_menu();
        sous_menu1._visible = false;
        }
}
evenements.onRelease=function()
    {
    k=k+1;   
    }

activites.onPress=function()
{
    if (l == 1)
    {
    Afficher_SousMenu3();
    Baisser_menu3();
    }

    if (l == 2)
    {
   
    sous_menu3._visible = false;
    Monter_menu3();
    }
   
    if (l>1)
   
    {
    l=0;
    }
   
    if(activites._y >127)
        {
        Monter_menu2();
        sous_menu2._visible = false;
        }
}

activites.onRelease=function()
{
    l=l+1;   
}
jeunesse.onPress=function()   
{   
    if(jeunesse._y >157)
        {
        Monter_menu3();
        sous_menu3._visible = false;
        }
    if (m == 1)
    {
    Afficher_SousMenu4();
    Baisser_menu4();
   
    }

    if (m == 2)
    {
   
    sous_menu4._visible = false;
    Monter_menu4();
   
    }
   
    if (m>1)
    {
    m=0;
    }
}
jeunesse.onRelease=function()
    {
    m=m+1;   
    }

accompagnement.onPress=function()   
{   
    if(accompagnement._y >187)
        {
        Monter_menu4();
        sous_menu4._visible = false;
        }
    if (n == 1)
    {
    Afficher_SousMenu5();
    Baisser_menu5();
   
    }

    if (n == 2)
    {
   
    sous_menu5._visible = false;
    Monter_menu5();
   
    }
   
    if (n>1)
    {
    n=0;
    }
}
accompagnement.onRelease=function()
    {
    n=n+1;   
    }
situer.onPress=function()
    {
    if(situer._y >207)
        {
        Monter_menu5();
        sous_menu5._visible=false;
        }
    }

7 réponses

Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Salut,
difficle d'expliquer ce qui n'allait pas. Avant toute chose, l'utilisation de plusieurs variables était une erreur (ça embrouille les if et t'obligeait à mettre des condition de positionnement croisée avec des conditions liées à tes variable).
Ensuite, j'ai simplifier certaines partie du code. Je pense qu'on pourrait l'optimiser en passant des paramètres en variable, mais je n'ai pas le temps. Par contre maintenant ça marche.
Désolé de l'avoir mené au bout, mais cela aurait été un peu trop compliqué d'avancé pas à pas sur le forum.
Voici ton code :

Stop();
//Variable permettant de savoir dans quelle rubrique on est
//l'action se déroule fonction de la rubrique, une seule variable suffit
lemenu=0;
initialisation();

function initialisation(){
//fonction servant à tout remettre à zéro
//j'ai pris les valeurs réelle pour ne pas que la fonction initialiser
//prenne les valeur en y des clips alors qu'il ne sont pas à leur place initiale
famille._y=67;
evenements._y=97;
activites._y=127;
jeunesse._y=157;
accompagnement._y=187;
situer._y=217;
maison._y=247;

sous_menu1._visible = false;
sous_menu2._visible = false;
sous_menu3._visible = false;
sous_menu4._visible = false;
sous_menu5._visible = false;
}

// -----------------------------------------> Menu 1
Baisser_menu = function(){
    evenements._y = evenements._y + 66;
    activites._y = activites._y + 66;
    jeunesse._y = jeunesse._y + 66;
    situer._y = situer._y + 66;
    maison._y = maison._y + 66;
    accompagnement._y = accompagnement._y +66;
}
Monter_menu = function(){   
    evenements._y = evenements._y - 66;
    activites._y = activites._y - 66;
    jeunesse._y = jeunesse._y - 66;
    situer._y = situer._y - 66;
    maison._y = maison._y - 66;
    accompagnement._y = accompagnement._y -66;
}

famille.onPress=function(){
    if (lemenu==1){
        //le if du menu ouvert --> on ferme
        //trace("famille if :: lemenu = "+lemenu);
        sous_menu1._visible = false;
        Monter_menu();
        //attribution de la valeur relative à ce qui est ouvert ou fermé à la variable lemenu
        lemenu=0;
    }
    else{
        //sinon on initialise et on ouvre le menu
        trace("famille else :: lemenu = "+lemenu);
        initialisation();
        //pas besoin de plusieurs fonction afficher, une seule suffit
        //on passe le clip à afficher en paramètre
        // la fonction est tout en bas
        Afficher(sous_menu1);
        Baisser_menu();
        //attribution de la valeur relative à ce qui est ouvert ou fermé à la variable lemenu
        lemenu=1;
    }
}
//idem pour les autres

// -------------------------------------------> menu 2
Baisser_menu2 = function(){
    activites._y = activites._y + 132;
    jeunesse._y = jeunesse._y + 132;
    situer._y = situer._y + 132;
    maison._y = maison._y + 132;
    accompagnement._y = accompagnement._y +132;
}

Monter_menu2 = function(){
    activites._y = activites._y - 132;
    jeunesse._y = jeunesse._y - 132;
    situer._y = situer._y - 132;
    maison._y = maison._y - 132;
    accompagnement._y = accompagnement._y -132;
}
evenements.onPress=function(){
    if(lemenu == 2)    {
        //trace("evenement if :: lemenu = "+lemenu);
        sous_menu2._visible = false;
        Monter_menu2();
        lemenu=0;
    }
    else{
    initialisation();
        //trace("evenement else :: lemenu = "+lemenu);
        Afficher(sous_menu2);
        Baisser_menu2();
        lemenu=2;
    }
}

// -------------------------------------------> menu 3
Baisser_menu3 = function(){
    jeunesse._y = jeunesse._y + 66;
    situer._y = situer._y + 66;
    maison._y = maison._y + 66;
    accompagnement._y = accompagnement._y +66;
}
Monter_menu3 = function(){   
    jeunesse._y = jeunesse._y - 66;
    situer._y = situer._y - 66;
    maison._y = maison._y - 66;
    accompagnement._y = accompagnement._y -66;
}

activites.onPress=function(){
    if (lemenu == 3){
        trace("activite if :: lemenu = "+lemenu);
        sous_menu3._visible = false;
        Monter_menu3();
        lemenu=0;
    }
    else{
        initialisation();
        //trace("activite else :: lemenu = "+lemenu);
        Afficher(sous_menu3);
        Baisser_menu3();
        lemenu=3
    }
}

// -------------------------------------------> menu 4
Baisser_menu4 = function(){
    situer._y = situer._y + 44;
    maison._y = maison._y + 44;
    accompagnement._y = accompagnement._y +44;
}
Monter_menu4 = function(){
    situer._y = situer._y - 44;
    maison._y = maison._y - 44;
    accompagnement._y = accompagnement._y -44;
}

jeunesse.onPress=function()    {
    if(lemenu == 4){
        //trace("jeunesse if :: lemenu = "+lemenu);
        sous_menu4._visible = false;
        Monter_menu4();
        lemenu=0;
    }
    else{
    initialisation();
        //trace("jeunesse else :: lemenu = "+lemenu);
        Afficher(sous_menu4);
        Baisser_menu4();
        lemenu=4;
    }
}
// -------------------------------------------> menu 5
Baisser_menu5 = function(){
    situer._y = situer._y + 88;
    maison._y = maison._y + 88;
}
Monter_menu5 = function(){   
    situer._y = situer._y - 88;
    maison._y = maison._y - 88;
}

accompagnement.onPress=function(){
    if (lemenu == 5){
        //trace("accompagnement if :: lemenu = "+lemenu);
        sous_menu5._visible = false;
        Monter_menu5();
        lemenu=0;
    }
    else{
        initialisation();
        //trace("accompagnement else :: lemenu = "+lemenu);
        Afficher(sous_menu5);
        Baisser_menu5();
        lemenu=5;
    }
}
situer.onPress=function(){
    initialisation();
}

// --------------------- AFFICHAGE SOUS MENU
//passage du sousmenu en variable (ici nommée clip)

function Afficher(clip){
    //trace("afficher : "+clip);
    clip._visible = true;
    clip.gotoAndPlay(2);
}

J'espère que cela ira. Je n'ai pas chercher à faire de transition du style l'un remonte puis l'autre descend, car j'ai eu l'impression que ce n'était pas ce que tu faisais.
Bon courage pour la suite.

Tout vient à qui sait attendre
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Salut,
j'ai l'impression qu'il y a un pb avec tes variables i, j k...

j=1
famille.onPress=function()
{   

    if (j == 1)
    {
    Afficher_SousMenu1();
    Baisser_menu();
    }

    if (j == 2)
    {
   
    sous_menu1._visible = false;
    Monter_menu();
    }
   
    if (j>1)
   
    {
    j=0;
    }
}

Lorsqu'à la fin du code tu mets j=0, rien dans ton code ne donne le comportement de j=0 puisqu'initialement j=1, de plus ne serais-ce pas à la place de j>1...  j>0 et dans ce cas initialement il faudrais j=0.

Je n'ai pas pris le temps de bien lire tout le code, mais je pense que c'est un problème lié à tes variables de condition. Si un truc sous condition ne fonctinne pas, c'est, ou bien que la fonction que tu appelles ne fonctionne pas (ce qui ne semble pas être le cas) ou bien que tu utilises mal ta variable de condition.

Tiens nous au courant.
Bon courage

Tout vient à qui sait attendre
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
26 mai 2008

merci de ta reponse si rapide,  je t'explique pourquoi j'ai mis le j=0; a la fin.
en fait en fesant des trace si je remet pas mon j à 0 à la fin  pour une raison que j'ignore j ne repasse plus par la valeur 1 du coup ca me foire tout lors des clique sur les boutons. Après le probleme viens à mon avis des controles sur les positions des boutons

if(jeunesse._y >157)
        {
        Monter_menu3();
        sous_menu3._visible = false;
       }
en fait la première fois ca marche bien  mais après c'est comme si la position du boutton n'etais plus bonne mais je vais deja tester ta solution voir si c'est ca qui me pose effectivement problème. merci beaucoup.
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
26 mai 2008

Bon je viens de tester ta solution et lorsque je reclique sur le bouton pour refermer le sous menu cela ne se fait pas et tous les boutons se retrouver decaler encore une fois vers le bas a cause que baisser_menu() se fait alors qu'il ne devrais pas. La ou ca peche et ou j'ai du traficoter les variables avec le j=0 c'est que a chaque fois il ne me remetais pas j a 1 alors qu au tout debut du code je lui demande. bon je suis pas sur de ce que j'avance mais il me semblerais que les variable initialisées au debut tant que l'animation est pas finie il ne repasse pas dessus.  Donc bon à part les valeurs en dur que j'ai evoqué dans le précédent message je ne vois pas de quoi ca peut venir et les variables (i,j...,m) ne sont la que pour controler l'appuis sur le bouton et le deuxieme appuis etant donner que je ne savait pas comment gérer ca avec onRollover avec le fait que lorsque la souris quitte le bouton le sous menu reste alors j'ai decider de faire comme ca.
Messages postés
618
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
27 août 2010
2
Si tout est dans le même fla (pas de loadmovie) met le en ligne que le puisse regarder. Ce sera plus simple.

Tout vient à qui sait attendre
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
26 mai 2008

je l'ai uploader sur rapidshare voila le lien
http://rapidshare.com/files/111020621/menu8.fla.html
vraiment merci de l'interet que tu porte a mon probleme, j'avais essayer sur d'autre forums sans vouloir dénigrer biensur et personne ne s'etait donner autant de mal encore merci .
Messages postés
7
Date d'inscription
vendredi 11 avril 2008
Statut
Membre
Dernière intervention
26 mai 2008

Merci infiniment c'est exactement ce que je cherchais a faire. Je me suis penché sur le code et je comprend parfaitement comment tu as fait. Et c'est vrai qu en passant en parametre, c'est beaucoup plus optimiser mais bon dans un premier temps je voulais que ca fonctionne. C'est pas grave si tu l'as finaliser du moment que je comprend comment tu as fait . Par contre au niveau des transitions c'est à dire que les boutons puisse se decaler a la meme vitesse que le sous menu si tu as un peut de temps, (pas tout de suite mais dans quelques jours ) ca m'interresserait assez que tu mexplique.  Encore merci de ton aide.