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 8.0] Didacticiel création d'un menu objet/xml (Etape 2) [Tutoriel]


Sujet :

Flash

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [Flash 8.0] Didacticiel création d'un menu objet/xml (Etape 2)
    Salut,

    Je reprends mon précédent Post sur lequel j'avais expliqué comment récupérer le 1er Niveau d'un Menu hiérarchique.

    Méthode entièrement dynamique, tous les clips sont et seront créés par code (très pratique donc).

    L'étape 2 consiste à rendre la procédure récursive pour que le nombre de menu ne soit plus limité, ni en nombre d'élément, ni en profondeur.

    L'étape 3 consistera à permettre l'escamotage des fils d'un élément à la façon d'un arbre.

    Je rappelle les éléments :

    Source XML (J'y ai ajouté 1 niveau pour en obtenir 3)
    Le fichier s'appelle Menus.xml
    (Il sera remplacé plus tard par une page XML Dynamique ASP dot Net 2.0 C# (et peut-être VB Dot Net).

    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
     
    <Root_Element>
       <Menus>
          <Menu caption="Accueil" open="clpPannel001Accueil"/>
          <Menu caption="Tchat" open="clpPannel002Tchat"/>
          <Menu caption="Messagerie" open="clpPannel003Messagerie">
             <SousMenus>
                <Menu caption="Envoyés" open="clpPannel003Messagerie01"/>
                <Menu caption="Recus" open="clpPannel003Messagerie02">
                   <SousMenus>
                      <Menu caption="Lus" open="clpPannel003Messagerie0201"/>
                      <Menu caption="NonLus" open="clpPannel003Messagerie0202"/>
                   </SousMenus>
                </Menu>
             </SousMenus>
          </Menu>
          <Menu caption="A propos" open="clpPannel004APropos"/>
       </Menus>
    </Root_Element>
    Source de la classe menu qui hérite MovieClip
    Le fichier s'appelle clMenu.as
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    /*
    Class : clMenu
    Auteur : Laurent Jordi
    Modifée le : 24/09/2006
    Copyright : Laurent Jordi
     
    Description : La classe permet de définir un élément du menu dynamique
    */
    class clMenu extends MovieClip 
    {
    	//Variables de liaison
    	public static var id:String = "__Packages.clMenu";
        private static var _isSymbolLinked:Boolean = Object.registerClass(id, clMenu);	
     
    	//Variables d'occurence privée
    	private var __index:Number;
    	private var __caption:String;
    	private var __link:String;
    	private var __childrenMenus:Array;
    	private var __maxChildrenIndex:Number = -1;
    	private var __previousMenu:MovieClip;
    	//Constructeur
    	//******************************************************
    	public function clMenu() {
    		var intTop:Number;
    		var tf = this.createTextField("txtCaption",this.getNextHighestDepth(),0,intTop,this._parent._width,10);
    		tf.autoSize = "left";
    	}
    	//******************************************************
    	public function get index():Number {
    		return this.__index;
    	}
    	public function set index(value:Number):Void {
    		this.__index = value;
    	}
    	//******************************************************
    	public function get caption():String {
    		return this.__caption;
    	}
    	public function set caption(value:String):Void{
    		this.__caption = value;
    		//Mise à jour du champ texte
    		this["txtCaption"].text = value;
    	}
    	//******************************************************
    	public function get link():String {
    		return this.__link;
    	}	
    	public function set link(value:String):Void{
    		this.__link = value;
    	}	
    	//******************************************************
    	public function get maxChildrenIndex():Number {
    		return this.__maxChildrenIndex;
    	}	
    	public function set maxChildrenIndex(value:Number):Void{
    		this.__maxChildrenIndex = value;
    	}
    	//******************************************************
    	public function get previousMenu():MovieClip {
    		return this.__previousMenu;
    	}	
    	public function set previousMenu(value:MovieClip):Void{
    		this.__previousMenu = value;
    	}
    }
    Source a mettre dans la première image d'un clip vide.
    Le fichier s'appelle TestMenu.fla mais peut s'appeler comme vous voulez.

    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
    57
    58
    59
    60
    61
    62
    63
     
    import clMenu;
     
    //Variables globales
    var maxChildrenIndex:Number = -1;
    var menuVerticalIndent = 0;
    var menuHorizontalIndent = 15;
    // Chargement du XML
    var menuXML:XML = new XML();
    var szSourceXLM:String = "Menus.xml"
    menuXML.onLoad = menuXML_onLoad;
    menuXML.ignoreWhite = true;
    menuXML.load(szSourceXLM);
     
    //Fonction récursive de parcours des frères d'un Node XML (récursion sur les sous menus)
    function loadMenus(currentNode,parentMenu,yOffset,xOffset) {
    	var currentMenu:MovieClip;
    	var currentMenuName:String;
    	var TMPprevMenuIndex:Number;
    	while (currentNode!=null) {
    		switch (currentNode.nodeName) {
    		case "Menu": //Utilisation d'un switch pour une éventuelle évolution ultérieure
    			parentMenu.maxChildrenIndex++;
    			currentMenuName = "MenuItem" + parentMenu.maxChildrenIndex;
    			currentMenu = parentMenu.attachMovie(clMenu.id,currentMenuName,parentMenu.getNextHighestDepth());
    			currentMenu.index = parentMenu.maxChildrenIndex;
    			currentMenu.caption = currentNode.attributes.caption;
    			trace(currentMenu._height);
    			if (_root.menuVerticalIndent==0) {_root.menuVerticalIndent = currentMenu.txtCaption._height}
    			currentMenu.link = currentNode.attributes.open;
    			if (currentMenu.index==0) {
    				currentMenu.previousMenu = null;
    				currentMenu._y = yOffset;
    				trace(yOffset);
    			} else {
    				TMPprevMenuIndex = currentMenu.index - 1
    				currentMenu.previousMenu = parentMenu["MenuItem" + TMPprevMenuIndex];
    				currentMenu._y = currentMenu.previousMenu._y + currentMenu.previousMenu._height;
    			}
    			currentMenu._x = xOffset;
    			switch (currentNode.childNodes[0].nodeName) {
    			case "SousMenus":
                                                       //La fonction s'appelle elle même
    				loadMenus(currentNode.childNodes[0].childNodes[0],currentMenu,_root.menuVerticalIndent,xOffset + _root.menuHorizontalIndent)
    				break;
    			}
    			break;
    		}
    		currentNode = currentNode.nextSibling;
    	}
    }
     
    //Appel de la récursion depuis l'évennement on Load de l'objet XML
    function menuXML_onLoad(success) {
    var cN;
    	_root.createEmptyMovieClip("clpMainMenu01",1);
    	var pM:MovieClip = _root["clpMainMenu01"];
    	pM.maxChildrenIndex = -1;
    	if (success) {
    		cN = menuXML.firstChild.childNodes[0].childNodes[0]; // Liste des menus
    		loadMenus(cN,pM,0,0);
    	}
    }
    Voila... chez moi ça marche...

    La suite la semaine prochaine (si j'ai le temps de m'en occuper...)

    Vos commentaire sont bien entendu, les bienvenus...

    @+

    Laurent Jordi
    Site CV
    Ezlogic.mc
    Dernière modification par CUCARACHA ; 01/10/2006 à 09h51.

  2. #2
    Membre émérite
    Avatar de jean philippe
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 062
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 062
    Points : 2 313
    Points
    2 313
    Par défaut
    salut
    quelle est la question ?

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    Salut

    C'est pas une question c'est un didacticiel ouvert aux commentaires. Ces derniers permettront de l'améliorer. Au final, j'aimerais que le menu dynamique puisse :

    • Servir de plan de site en connectant directement au sitemap des projets ASP net 2.0
    • Servir de base à un site complexe en flash 8.0
    • Se connecter à une base de données pour extraire une vue hiérarchique d'une table


    Si certains son preneur, le code est à leur disposition...

    @+

    Laurent

    Concernant Flash 9.0 (et l'ajout de la nouvelle méthode de gestion des événements) je dois attendre de bosser du le produit licencié car Flash 9 ne marche pas avec la version d'essai.

  4. #4
    Rédacteur

    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    435
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 435
    Points : 1 354
    Points
    1 354
    Par défaut
    hello !
    Est ce que l'on peut voir un exemple de ton menu final ?

    sinon je te conseille également de te lancer dans l'AS3 dès que tu pourra, ca vas changer ta vie

    Remarque : concernant le tag [expert] dans le sujet, je ne sait pas s'il est vraiment requis. Il n'y a rien de vraiment compliqués la-dedans disons plutot intermediaire

  5. #5
    CUCARACHA
    Invité(e)
    Par défaut On en est qu'à la 2eme étape...
    @+

    laurent

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    Disons que c'est une approche plus de vrai codeur que de bidouilleur flash :p. Des fichier de code séparés, des objets, une encapsulation cohérente. Mais il est vrai qu'il y a rien de techniquement abusé ^^.

    Par contre une question que je me pose. Quel est le but de faire précédé par _ ses variables ? en C c'est les nom réservé par le système, mais en flash ?

  7. #7
    CUCARACHA
    Invité(e)
    Par défaut Convention de nommage personnelle
    Salut,

    C'est simplement une convention personnelle. Je trouve que c'est un peu plus lisible et c'est une habitude que j'ai depuis un certain temps.

    Concernant le niveau, j'aimerais qu'à terme nous ayons créé un véritable composant pro qui pourra servir à notre communauté. De plus je dirais que la combinaison des compétences de développeur objet et de bidouilleur flash donne souvent de très bons résultats. Enfin, le fait de travailler sur des composant qui ne nécessitent aucun clip préfabriqués me parait tout indiqué pour créer des applications qui seront directement paramétrées à partir de serveurs web évolués comme IIS 6/Dot Net Framework 2.0.

    Je crois que cette plateforme sera très puissante car je reste convaincu que l'ASP dot net 2.0 est inadapté au développement web coté client pour faire des applications hébergées crossplatform. C'est compliqué, et le fait que le Framework génère lui même le code HTML un peu à sa guise pose souvent des problèmes.

    Si nous parvenons à créer une couche cliente en flash qui pourrait être directement paramétrée à l'aide de pages ASP dot Net, cela nous ouvrirait des perspectives plus qu'intéressantes.

    Je n'ai pas d'environnement PHP ou J2EE à ma disposition mais il serait intéressant que, lorsque nous nous attaquerons à la couche serveur, que d'autres développeurs implémentent tout ça dans ces environnements afin de disposer d'exemples plus complets.

    Merci pour vos participations

    Laurent
    Dernière modification par CUCARACHA ; 01/10/2006 à 10h02.

  8. #8
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 856
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 856
    Points : 6 114
    Points
    6 114
    Par défaut
    Si tu n'aime pas l'ASP.net parce qu'il génère du code que tu ne souhaite pas, il y a 2 solutions :
    • Prend des cours car tu vera que tout se qui te pose problème peut etre contourné, Microsoft n'a pas birdé sont langage, bien au contraire.
    • Fait des sites en PHP, il ne retouche pas a ton code par la suite.


    Si tu cherche un environnement de dev PHP, tu a EasyPhp et Wamp5 parfait pour les débutants

  9. #9
    CUCARACHA
    Invité(e)
    Par défaut
    Citation Envoyé par pyrrha
    hello !
    Est ce que l'on peut voir un exemple de ton menu final ?
    Mon menu final est utilisé dans une application hébergée que je suis en train de développer et que je ne peux pas trop montrer pour le moment.

    Citation Envoyé par pyrrha
    sinon je te conseille également de te lancer dans l'AS3 dès que tu pourra, ca vas changer ta vie
    J'en suis persuadé, en particulier grâce à la nouvelle gestion des événements. Je l'ai installé mais il n'est pas possible d'utiliser flash 9.0 avec la version d'évaluation de flash 8.0. Je devrais acheter la mise à jour flash 8 vers le 15 octobre.

    Citation Envoyé par pyrrha
    Remarque : concernant le tag [expert] dans le sujet, je ne sais pas s'il est vraiment requis. Il n'y a rien de vraiment compliqués là-dedans disons plutôt intermédiaire
    J'ai supprimé le tag, vu ce que je vois tous les jours sur le terrain, il n'y a que peu de développeurs et en particulier de flasheurs qui programment (et qui pensent) réellement objet. Ce tag concernait plus l'approche et l'architecture final que le pur niveau de prog AS.

    @+

    Laurent Jordi

  10. #10
    CUCARACHA
    Invité(e)
    Par défaut
    Citation Envoyé par arnolem
    [*]Prend des cours car tu veras que tout se qui te pose problème peut être contourné, Microsoft n'a pas bridé sont langage, bien au contraire.
    Trollage inutile, j'aime l'ASP, l' ASP.net, c'est juste que je trouve que de ne pas totalement maîtriser le code généré est parfois un peu frustrant, en particulier dans le dev de solutions Ajax. Lorsque le besoin s'en fait sentir, je crée des pages ASP 3.0 qui ne sont pas compilées par le Framework.

    Citation Envoyé par arnolem
    [*]Fait des sites en PHP, il ne retouche pas a ton code par la suite.[/LIST]
    Si tu cherche un environnement de dev PHP, tu a EasyPhp et Wamp5 parfait pour les débutants
    Je ne dispose pas d'environnement de prod, j'ai une machine sur laquelle j'ai déployé EasyPHP et My SQL mais je ne m'en sert que très rarement.

    @+

    Laurent

  11. #11
    Rédacteur

    Avatar de arnolem
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 856
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 856
    Points : 6 114
    Points
    6 114
    Par défaut
    Citation Envoyé par Laurent Jordi
    Trollage inutile, j'aime l'ASP, l' ASP.net, c'est juste que je trouve que de ne pas totalement maîtriser le code généré est parfois un peu frustrant, en particulier dans le dev de solutions Ajax. Lorsque le besoin s'en fait sentir, je crée des pages ASP 3.0 qui ne sont pas compilées par le Framework.
    Ce n'ai pas une connerie, tu peux tout faire en ASP.net mais par des chemins différents. Tu a une totale maitrise du code généré, encore faut il savoir comment le maitriser, si tu le laisse par defaut, c'est sur que tu va avoir les cas les pls classique uniquement.
    Sinon ne cherche pas spécialement a t'installer une machine de prod pour du php, c'est tellement répondu que tu a des hebergement à moins de 50€ par ans

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    Je suis de ton avis les site web migre vers de véritable application web. Je fait d'ailleur mon site web sur cette optique. Mais a présent pour imposer un dialect XML de description d'interface il faut pas mal de poids. Toute les grosse boite lance leur propre dialect.

    En faite, pour moi, entre faire un bon framewwork personnel et un framework pour les autre il y a un monde. Le poid des finances p-e :p.

    Par contre je te souhaite bonne chance pour ton projet.

  13. #13
    CUCARACHA
    Invité(e)
    Par défaut Concernant XML
    Salut,

    Ca n'est pas par gout de l'auto flagellation que j'utilise XML. C'est simplement que c'est super pratique. En plus on peu maquetter une appli avec XML Notepad puis lorsque ça marche, créer une couche data qui va générer le fichier à partir d'une base de données.

    Ca permet de mieux travailler en équipe, ça donne plus de valeur au projet, en particulier lorsque tu prends de nouveaux collaborateurs qui peuvent être super spécialisés et qui n'ont pas besoin de connaitre toutes les technos utilisées dans le projet. Il est ensuite plus facile de convaincre d'éventuels investisseurs de participer à ton projet (en l'occurrence, c'est mon objectif).

    @+

    Laurent Jordi

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    Citation Envoyé par Laurent Jordi
    Salut,

    Ca n'est pas par gout de l'auto flagellation que j'utilise XML. C'est simplement que c'est super pratique. En plus on peu maquetter une appli avec XML Notepad puis lorsque ça marche, créer une couche data qui va générer le fichier à partir d'une base de données.

    Ca permet de mieux travailler en équipe, ça donne plus de valeur au projet, en particulier lorsque tu prends de nouveaux collaborateurs qui peuvent être super spécialisés et qui n'ont pas besoin de connaitre toutes les technos utilisées dans le projet. Il est ensuite plus facile de convaincre d'éventuels investisseurs de participer à ton projet (en l'occurrence, c'est mon objectif).

    @+

    Laurent Jordi

    Je n'ai rien contre les dialect XML. Je tennais juste a dire que comme dialect XML pour faire des interface il y a déjà :

    De adobe/macromedia : MXML(Flex)
    Mozilla : XUL
    Microsoft : XAML (WinFx)
    OASIS (dont fait partie adobe) : UIML
    Dpi SoftWare : XWidglets (Qui fait pour .net et Java ce que tu veux faire en flash)
    OpenLaszlo (Que je ne connais pas vraiment mais basé flash aussi) : LZX

    Donc, comme tu le vois il y a pas mal de dialect XML déjà en course qui aimerais tous être le sacro-saint standart ^^.

  15. #15
    CUCARACHA
    Invité(e)
    Par défaut Je préfère comprendre ce que je fais.
    Salut,

    Merci pour ta réponse. L'objectif étant de créer un composant, j'aimerais bien comprendre ce que je fais, toutefois je regarderais ces produits.

    Il est clair que pratiquement tout a déja été développé mais dans ce cas, ne serions nous plus que des joueurs de Légos ?

    Merci encore

    Laurent

  16. #16
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 177
    Points : 196
    Points
    196
    Par défaut
    Il est bien de refaire pour proposer mieux !
    Mais pour cela il faut souvent se renseigner sur l'expérience de ses prédécesseurs ^^. Enfin, c'est mon point de vue.

  17. #17
    CUCARACHA
    Invité(e)
    Par défaut Démarche d'apprentissage
    Salut,

    Personnellement, je considère que j'apprends. Confronter ma méthode aux avis et a celles des autres me permet justement je me renseigner sur ce qui se fait ailleurs...

    @+

    Laurent

Discussions similaires

  1. [FLASH MX] création d'un menu
    Par Adren dans le forum Flash
    Réponses: 35
    Dernier message: 27/07/2006, 16h21
  2. [FLASH MX2004] Création d'un menu.
    Par ALCINA dans le forum Flash
    Réponses: 1
    Dernier message: 16/02/2006, 09h36
  3. [FLASH MX] Action des boutons dans un menu déroulant
    Par zab_paris dans le forum Flash
    Réponses: 1
    Dernier message: 05/07/2005, 18h14
  4. Création d'un menu
    Par gros bob dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/01/2004, 08h43
  5. [Flash 5] Création d'un menu
    Par WriteLN dans le forum Flash
    Réponses: 4
    Dernier message: 09/10/2003, 13h37

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