Jump to content

[RESOLU] menu en flash


Recommended Posts

si tu ne connais ni l'un ni l'autre, il sera certainement plus simple de le faire en javascript

tu obtiendra l'effet en utilisant les attributs onmouseover/onmouseout ou onmouseclick (il y en a certainement d'autres, je suis pas un crac du JS non plus, et je garantie pas que mon bout de code fonctionne)

ces attributs vont dans le conteneur de ton bouton (genre <div id='item0' onmouseover='magic(this.id);' onmouseout='magic(this.id);' class='bouton'>Mon Bouton</div>)

tu vas egalement creer les boutons qui doivent etre masque (genre div id='hidden_item0_entry0' style='display:none'> ma page </div>)

enfin, tu rajoute la fonction JS:

function magic(match)
{
  for (i = 0; (elt = document.get_element_by_id('hidden_'+match+'entry'+i) != NULL; i++)
	elt.style.display = elt.style.display == 'none' ? 'block' : 'none';
}

Link to comment
Share on other sites

ha...! trop tard j'ai déja commencé :cartonrouge:

j'ai trouver un truc qui m'a beaucoup aidé pour le principe, probleme il est en AS2 et j'ai commencer avec AS3... donc j'essaie de... adapter

le lien a cette adresse : http://urfman.free.fr/fhw/accordeon.html

et la source est là : http://urfman.free.fr/fhw/Test_accordeon.zip

partant de la :

1 - remplacer les nom des menu par les miens

2 - remplacer les "on release=function()" par les "addEventListener" correspondant

3 - remplacer les "_parent" par des "parent"

(le source est relativement petit)

pour le clip de chaque menu :

img=0

stop(); // Je met des stop() et des condition de lecture si le menu est cliqué...
addEventListener(MouseEvent.MOUSE_DOWN,ss_menu);
function ss_menu(Event:MouseEvent):void
{ // Si je clique
if(parent.currentMenu != null)
{ // Voir le *
	parent.retractClip();// 1) je lance la fonction qui retracte le dernier menu consulté si les condition le demande
}
parent.currentMenu =_name;// 2) Je dis bien à la racine de mon flash quel menu est en train de s'ouvrir (_name = nom du clip concerné)
gotoAndPlay(2); // 3) je m'étend (enfin !)
}


//*  Ici, je verifie les condition necessaire pour savoir si il y a un menu à fermer
//   != c'est "different de" Donc, je n'execute la fonction si currentMenu est null, à savoir, aucun menu ne s'est encore ouvert...

img=45

stop();
this.addEventListener(MouseEvent.MOUSE_DOWN,go_play); 
function go_play():void
{
this.gotoAndPlay(46);
}

et sur la timeline main (1 seule image clé):

var currentMenu:MovieClip = null; // On initialise une variable donnant le dernier menu ayant été étendu (aucun au debut)

// On place les menu les uns en dessous des autres et on actualise constament
onEnterFrame = function(){
mngmt_2._y = mngmt_1._y + mngmt_1._height - 1; // le -1 est la pour eviter la doublure des bordures
/*menu3._y = menu2._y + menu2._height - 1;
menu4._y = menu3._y + menu3._height - 1;*/
}

// Voici une fonction qui retracte un menu si on clique sur un autre...
//Je la nomme "retractClip". Ici, c'est la recette, je ne donne encore l'ordre à flash de l'executer !

function retractClip() {
if(this[currentMenu]._currentframe != 1){ // Si le dernier menu est encore étendu (si il n'est pas sur la frame 1)...
this[currentMenu].gotoAndPlay(46);// ... il joue la frame d'après pour te se fermer
}
}

probleme : en sortie j'obtient :

1119: Accès à la propriété currentMenu peut-être non définie, via la référence de type static flash.display:DisplayObjectContainer.
// if(parent.currentMenu != null)
1061: Appel à la méthode retractClip peut-être non définie, via la référence de type static flash.display:DisplayObjectContainer. 
// parent.retractClip();
1120: Accès à la propriété non définie  
// _name. parent.currentMenu =_name;
1119: Accès à la propriété currentMenu peut-être non définie, via la référence de type static flash.display:DisplayObjectContainer.
// parent.currentMenu =_name;
Warning: 1058: Problème de migration : la propriété '_height' n'est plus prise en charge.  Utilisez plutôt la propriété DisplayObject.height.. 
// mngmt_2._y = mngmt_1._y + mngmt_1._height - 1;

- je pense que le probleme de currentMenu vient d'un probleme de declaration du movieclip (code de la timeline main) qui doit s'effectuer autrement en AS3 (je suppose)

- en ce qui concerne retractCip je vois pas

- et pour le probleme de migration je cherche...

si quelqu'un voi d'ou sa peut venir...

[EDIT] pour les warnings c'est regler, reste donc les 4 premieres erreurs

Link to comment
Share on other sites

bon ba en fait remplacer "_parent" par "parent". sa n'a pas l'air super...

le probleme a l'air de venir de la mais je vois pas comment le resoudre

[EDIT] j'ai tenter de contourner le probleme en remplacant "_parent" par "root" mais les meme erreur se produisent ... :cartonrouge:

Link to comment
Share on other sites

Bon si ça fonctionne tant mieux mais juste pour info :

Le problème avec tes erreurs est que tu essaies d'accèder aux enfants d'un DisplayObject avec la mauvaise syntaxe. Il ne faut pas faire :

parent.currentMenu

car cela signifie accéder au membre "currentMenu" de la structure DisplayObjectContainer (j'utilise volontairement du jargon C puisque tu es un expert :francais: ) qui bien entendu n'existe pas. Tout les conteneurs graphiques n'ont pas de currentMenu.

Pour accèder à un enfant bien précis d'un DisplayObjectContainer tu peux utiliser entre autres la méthode getChildByName :

parent.getChildByName("currentMenu")

Link to comment
Share on other sites

:mdr:

merci pour l'astuce... :francais:

a savoir comment faire pour trouver d'entrer de jeux la bonne fonction qui correspond a quoi ....

l'avantage avec le C c'est qu'au moins 1 nom ne peut pas correspondre a 36 fonction (parfois l'aide interactive de flash me sort 36 proto différent pour le meme nom de fonction/methode...)

par contre, je me trompe peut etre mais ont dirait qu'il y a une sorte de logique dans tout sa, ou un meme nom de methode pourrait appartenira plusieurs "classe" des genres de groupement en fonction des objets qu'elles doivent traiter ... ???

Link to comment
Share on other sites

les joies de la polymorphie :)

enfin, je sais pas precisement de quoi tu parles (flash, technos a la con, toussa ^^), mais c'est l'un des gros avantages des langages objet

on cree une classe generic, qui represente ta page (par exemple), cette classe a les methodes load() et unload() (ouai, gros gros exemple)

on a une classe bouton extend generic (qui herite de), avec donc les methodes de generic (que tu ne reimplementes pas, a moins que la classe mere soit virtuelle, ... enfin, manque pleins de details, l'objet, ca s'explique pas, ca se venere), mais aussi sa methode click() (toujours gros exemple)

apres (pour que tu comprennes pourquoi t'as plusieurs protos), j'ai parle des virtuelles (et c'est qu'un exemple parmis d'autres)

dans ta classe virtuelle toto, tu as des methodes virtuelles MakeSandwitch MakeCoffee, MakeWorld (bon, je resume, t'as beaucoup de doc a lire ^^)

et tu fais heriter sur les class titi et tata, qui vont toutes les deux implementer ces methodes, de maniere differente

ce qui simplifie pas mal les prototypages (templates, stockage de plusieurs "differents" types d'objets heritant d'une classe commune dans un conteneurs de la stl, ...)

(l'objet, raconte en cinq lignes

mais, pour en revenir au "ca se venere" : oui, c'est plus que du code, c'est une religion

www.cplusplus.com pour bien commencer, et on en reparle dans 10 ans :ouioui: )

Link to comment
Share on other sites

Ouais ! Enfin faut trop lui en demander à Msieur actionscript hein, les classes génériques c'est pas demain la veille qu'on verra ça dans Flash :transpi:

Mais oui faignan ce regroupement de fonctionnalités que tu devines c'est la base de la programmation objet :craint:

Ensuite il n'y a pas non plus de polymorphisme, seulement des paramètres par défaut (que t'es pas obligé de préciser et ça leur met une valeur par défaut quoi)

C'est toute une tournure d'esprit à acquérir et pour certains c'est pas facile (je suis bien placé pour le savoir :ouioui:) mais quand tu l'apprends ça te change la vie ! ;)

Link to comment
Share on other sites

les joies de la polymorphie :)

on cree une classe generic, qui represente ta page (par exemple), cette classe a les methodes load() et unload() (ouai, gros gros exemple)

on a une classe bouton extend generic (qui herite de), avec donc les methodes de generic (que tu ne reimplementes pas, a moins que la classe mere soit virtuelle, ...

[...]

(l'objet, raconte en cinq lignes

mais, pour en revenir au "ca se venere" : oui, c'est plus que du code, c'est une religion

www.cplusplus.com pour bien commencer, et on en reparle dans 10 ans :bravo: )

et la marmote elle mais le chocolat dans le papier d'alu... mais bien sûr !!! AARRRRF :transpi:

C'est toute une tournure d'esprit à acquérir et pour certains c'est pas facile (je suis bien placé pour le savoir ) mais quand tu l'apprends ça te change la vie !

comme sa maintenant on est 2

bon bah des que j'ai fait mon site je me met au C++, et toc !

ce qui simplifie pas mal les prototypages (templates, stockage de plusieurs "differents" types d'objets heritant d'une classe commune dans un conteneurs de la stl, ...)

meme si j'ai compris ton explication (en gros, j'avoue :byebye: ), de là a dire que sa simplifie... ya un monde

par ce que la methode ".grominet" comprenant 150 proto diférents selon qu'elle sort de la classe "Fake.world" ou "Fork.Program" pouvant s'appliqué a des objet sortant de 36 classe "titi" ou "tata" diférentes, essaye un peut de savoir quelle parametre tu doit leur passer ou comment tu doit les appliqué a l'objet en question ... :bravo:

cela dit j'imagine que c'est comme tout sa s'apprend !

Link to comment
Share on other sites

bah, si tu te met au C++, au début, tu sera déstabilisé par la trés grand variété de types (classes, conteneurs, de la stl ou pas, ..., bref, t'en as dans tous les sens), et le fait qu'il faille parfois (en fonction du projet) pouvoir traiter indifféremment plusieurs types d'objets, déviant en général d'une même entité.

par contre, ca 'simplifie' si tu regarde ça globalement

faut des notions d'architecture, pour mettre un tel bordel en place (un coup de modélisation, ça coute pas plus cher)

mais avec un peu de bon sens, en regardant le produit finit, on comprends globalement pourquoi les chose sont ainsi faites, l'interet de pouvoir appliquer plusieurs fois, de manière transparente, le même traitement a tous les elements d'un ensemble, quand bien même ces éléments comprtent différentes entités (boutons, textarea, images, ...), mais disposent d'un même 'set' de méthodes

Link to comment
Share on other sites

c'est vrai que dit comme sa sa merite qu'on si interesse !

après je vais déja essayer de monter un site web genre pas-trop-moche.com et sa sera déja pas trop mal. pour l'instant je me prend la tete avec la 3D et avec AS (qui sont tout les 2 très casse-cou***). je test 3d swift, qui n'est pas simple a prendre en main (un vrai bordel).

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...