AS2.0 : Classe menu, votre avis ?

AS2.0 : Classe menu, votre avis ? - Flash/ActionScript - Programmation

Marsh Posté le 19-03-2006 à 01:18:15    

SAlut,  
 
Je viens de terminé une premiere ébauche de ma premiere classe AS2.0 et je voulais avoir votre avis sur la syntaxe et sur la structure.
 
Des exemples et le code sont accessibles sur http://manubonnet.free.fr/blog/files/menu/menu.html
 
Voici la classe :  
 

Code :
  1. class menu {
  2. private var conteneur_mc:MovieClip;
  3. private var conteneurParties_mc:MovieClip;
  4. private var conteneurSousParties_mc:MovieClip;
  5. private var cible_mc:MovieClip;
  6. private var parties_mc:MovieClip;
  7. private var sousParties_mc:MovieClip;
  8. private var chargeurImage:MovieClipLoader;
  9. private var orientationMenu:String;
  10. private var chemin:String;
  11. private var menuXML:XML;
  12. private var largeur:Number;
  13. private var hauteur:Number;
  14. private var Coordx:Number;
  15. private var Coordy:Number;
  16. private var profondeur:Number;
  17. private var policePartie:String = "Arial";
  18. private var taillePartie:Number = 13;
  19. private var espacePartie:Number = 10;
  20. private var couleurPartie:Number = 0x000000;
  21. private var couleurFondPartie:Number = 0xFFFFFF;
  22. private var couleurBordurePartie:Number = 0xCCCCCC;
  23. private var courbeBordurePartie:Number = 0;
  24. private var couleurFondOverPartie:Number = 0xFFFFFF;
  25. private var couleurBordureOverPartie:Number = 0xFFFFFF;
  26. private var tailleBordurePartie:Number = 1;
  27. private var policeSousPartie:String = "Arial";
  28. private var tailleSousPartie:Number = 10;
  29. private var espaceSousPartie:Number = 20;
  30. private var couleurSousPartie:Number = 0x000000;
  31. private var couleurFondSousPartie:Number = 0xFFFFFF;
  32. private var couleurBordureSousPartie:Number = 0xEEEEEE;
  33. private var courbeBordureSousPartie:Number = 0;
  34. private var couleurFondOverSousPartie:Number = 0xFFFFFF;
  35. private var couleurBordureOverSousPartie:Number = 0xFFFFFF;
  36. private var tailleBordureSousPartie:Number = 1;
  37. private var tempoQuit:Number = 500;
  38. private var pos:Number = espacePartie/2;
  39. public function menu(cible:MovieClip,
  40.       chemin:String,
  41.       x:Number,
  42.       y:Number,
  43.       l:Number,
  44.       h:Number,
  45.       orient:String,
  46.       tempo:Number,
  47.       profondeur:Number) {
  48.  this.cible_mc = cible;
  49.  this.chemin = chemin;
  50.  this.orientationMenu = orient;
  51.  this.tempoQuit = tempo;
  52.  this.profondeur = profondeur;
  53.  (l == null or l == "undefined" ) ? this.largeur = Stage.width : this.largeur = l;
  54.  (h == null or h == "undefined" ) ? this.hauteur = Stage.height : this.hauteur = h;
  55.  this.Coordx = x;
  56.  this.Coordy = y;
  57. }
  58. public function creerMenu():Void {
  59.  trace("Methode : creerMenu" );
  60.  creerConteneurPrincipal(this.Coordx, this.Coordy);
  61.  chargeXML();
  62. }
  63. //Créer le conteneur principal  
  64. private function creerConteneurPrincipal(x:Number, y:Number):Void {
  65.  trace("Methode : creerConteneurPrincipal" );
  66.  conteneur_mc = cible_mc.createEmptyMovieClip("conteneur_mc", profondeur);
  67.  conteneur_mc._x = x;
  68.  conteneur_mc._y = y;
  69.  creerConteneurParties();
  70. }
  71. //Créer le conteneur des parties  
  72. private function creerConteneurParties():Void {
  73.  trace("Methode : creerConteneurParties" );
  74.  conteneurParties_mc = conteneur_mc.createEmptyMovieClip("conteneurParties_mc", 1);
  75.  creerCadre(conteneurParties_mc, largeur, hauteur, couleurFondPartie, couleurBordurePartie, tailleBordurePartie, courbeBordurePartie);
  76. }
  77. //Créer le conteneur des sous-parties  
  78. private function creerConteneurSousParties(partie:Number, position:Number, nbSousPartie:Number):Void {
  79.  trace("Methode : creerConteneurSousParties" );
  80.  var moi:Object = this;
  81.  conteneurSousParties_mc = conteneur_mc.createEmptyMovieClip("conteneurSousParties_mc", conteneur_mc.getNextHighestDepth());
  82.  fonduApparition(conteneurSousParties_mc,"on" );
  83.  if(orientationMenu == "horizontal" ) {
  84.   conteneurSousParties_mc._x = position;
  85.   conteneurSousParties_mc._y = hauteur;
  86.  } else if(orientationMenu == "vertical" ) {
  87.   conteneurSousParties_mc._x = largeur;
  88.   conteneurSousParties_mc._y = position;
  89.  }
  90.  creerSousParties(partie, nbSousPartie);
  91. }
  92. //Créer un cadre de fond
  93. function creerCadre(cible:MovieClip, l:Number, h:Number, couleurFond:Number, couleurBordure:Number, tailleBordure:Number, courbeBordure:Number):Void {
  94.  trace("Methode : creerCadre" );
  95.  cible.createEmptyMovieClip("cadre_mc", 0);
  96.  cible.cadre_mc.moveTo(0, 0);
  97.  cible.cadre_mc.beginFill(couleurFond);
  98.  cible.cadre_mc.lineStyle(tailleBordure, couleurBordure);
  99.  cible.cadre_mc.lineTo(l-courbeBordure, 0);
  100.  cible.cadre_mc.curveTo(l, 0, l, courbeBordure);
  101.  cible.cadre_mc.lineTo(l, h-courbeBordure);
  102.  cible.cadre_mc.curveTo(l, h, l-courbeBordure, h);
  103.  cible.cadre_mc.lineTo(courbeBordure, h);
  104.  cible.cadre_mc.curveTo(0, h, 0, h-courbeBordure);
  105.  cible.cadre_mc.lineTo(0, 0);
  106.  cible.cadre_mc.endFill();
  107. }
  108. //Charge le fichier XML du menu
  109. private function chargeXML():Void {
  110.  trace("Methode : chargeXML" );
  111.  var moi:Object = this;
  112.  menuXML = new XML();
  113.  menuXML.ignoreWhite = true;
  114.  menuXML.load(chemin);
  115.  menuXML.onLoad = function(success:Boolean)
  116.  {
  117.   if(success)
  118.    moi.creerParties();
  119.  }
  120. }
  121. //Afficher les parties  
  122. private function creerParties():Void {
  123.  trace("Methode : creerParties" );
  124.  parties_mc = conteneurParties_mc.createEmptyMovieClip("parties_mc", 1);
  125.  var nbPartie:Number = menuXML.firstChild.childNodes.length;
  126.  for(var numero:Number = 0; numero<nbPartie; numero++) {
  127.   afficherPartie(numero);
  128.  }
  129. }
  130. //Afficher les sous parties  
  131. private function creerSousParties(partie:Number, nbSousPartie:Number):Void {
  132.  trace("Methode : creerSousParties" );
  133.  sousParties_mc = conteneurSousParties_mc.createEmptyMovieClip("sousParties_mc", 1);
  134.  for(var numero:Number = 0; numero<nbSousPartie; numero++) {
  135.   afficherSousPartie(partie,numero);
  136.  }
  137.   creerCadre(conteneurSousParties_mc, sousParties_mc._width+espaceSousPartie, sousParties_mc._height, couleurFondSousPartie, couleurBordureSousPartie, tailleBordureSousPartie, courbeBordureSousPartie);
  138. }
  139. //Création du bouton
  140. private function afficherPartie(numero:Number):Void {
  141.  trace("Methode : afficherPartie" );
  142.  var moi:Object = this;
  143.  //Infos sur la partie  
  144.  var nomPartie:String = menuXML.firstChild.childNodes[numero].attributes.nom;
  145.  var srcPartie:Function = menuXML.firstChild.childNodes[numero].attributes.src;
  146.  var nbSousPartie:Number =  menuXML.firstChild.childNodes[numero].childNodes.length;
  147.  //Création du bouton
  148.  var bouton_mc:MovieClip = parties_mc.createEmptyMovieClip("bouton_mc"+numero, numero);
  149.  if(orientationMenu == "horizontal" )  {
  150.   bouton_mc._x = pos;
  151.  } else if(orientationMenu == "vertical" )  {
  152.   bouton_mc._y = pos;
  153.   bouton_mc._x = espacePartie/2;
  154.  }
  155.  bouton_mc.onRollOver = function () {
  156.   if(moi.orientationMenu == "horizontal" ) {
  157.    moi.creerCadre(this, this._width+moi.espacePartie, moi.hauteur, moi.couleurFondOverPartie, moi.couleurBordureOverPartie, 0, 0);
  158.    this.cadre_mc._x = -(moi.espacePartie/2);
  159.   } else if(moi.orientationMenu == "vertical" ) {
  160.    moi.creerCadre(this, moi.largeur, this._height, moi.couleurFondOverPartie, moi.couleurBordureOverPartie, 0, 0);
  161.    this.cadre_mc._x = -(moi.espacePartie/2);
  162.   }
  163.   if(nbSousPartie>0) {
  164.    if(moi.orientationMenu == "horizontal" )
  165.     moi.creerConteneurSousParties(numero, this._x-(moi.espacePartie/2), nbSousPartie);
  166.    else if(moi.orientationMenu == "vertical" )
  167.     moi.creerConteneurSousParties(numero, this._y, nbSousPartie);
  168.   } else {
  169.    moi.fonduApparition(moi.conteneurSousParties_mc,"off" );
  170.   }
  171.  }
  172.  bouton_mc.onRollOut = function () {
  173.   this.cadre_mc.removeMovieClip();
  174.   if (!moi.conteneurSousParties_mc(_xmouse, _ymouse, false)) {
  175.    moi.fonduApparition(moi.conteneurSousParties_mc,"off" );
  176.   }
  177.  }
  178.  bouton_mc.onPress = function () {
  179.   moi.chargeSrc(srcPartie);
  180.  }
  181.  //Création de la zone de texte
  182.  var bouton_txt:TextField = bouton_mc.createTextField("bouton_txt", 1, 0, 0, 0, 0);
  183.  bouton_txt.autoSize = true;
  184.  bouton_txt.text = nomPartie;
  185.  bouton_txt.selectable = false;
  186.  //Création des styles du texte
  187.  var mon_format:TextFormat = new TextFormat(policePartie, taillePartie, couleurPartie);
  188.  bouton_txt.setTextFormat(mon_format);
  189.  if(orientationMenu == "horizontal" )
  190.   pos = bouton_txt._width+bouton_mc._x+espacePartie;
  191.  else if(orientationMenu == "vertical" )
  192.   pos = bouton_txt._height+bouton_mc._y+espacePartie;
  193. }
  194. //Création du bouton
  195. private function afficherSousPartie(partie:Number,numero:Number):Void {
  196.  trace("Methode : afficherSousPartie" );
  197.  var moi:Object = this;
  198.  //Variables de la partie  
  199.  var nomSousPartie:String = menuXML.firstChild.childNodes[partie].childNodes[numero].attributes.nom;
  200.  var srcSousPartie:String = menuXML.firstChild.childNodes[partie].childNodes[numero].attributes.src;
  201.  //Création du bouton
  202.  var bouton_mc:MovieClip = sousParties_mc.createEmptyMovieClip("bouton_mc"+numero, numero);
  203.  bouton_mc._y = espaceSousPartie*numero;
  204.  bouton_mc._x = (espaceSousPartie/2);
  205.  bouton_mc.onPress = function () {
  206.   moi.chargeSrc(srcSousPartie);
  207.  }
  208.  bouton_mc.onRollOver = function () {
  209.   moi.creerCadre(this, moi.sousParties_mc._width+moi.espaceSousPartie, this._height, moi.couleurFondOverSousPartie, moi.couleurBordureOverSousPartie, 0, 0);
  210.   this.cadre_mc._x = -this._x;
  211.  }
  212.  bouton_mc.onRollOut = function () {
  213.   this.cadre_mc.removeMovieClip();
  214.  }
  215.  //Création de la zone de texte
  216.  var bouton_txt:TextField = bouton_mc.createTextField("bouton_txt", 1, 0, 0, 0, 0);
  217.  bouton_txt.autoSize = true;
  218.  bouton_txt.text = nomSousPartie;
  219.  bouton_txt.selectable = false;
  220.  //Création des styles du texte
  221.  var mon_format:TextFormat = new TextFormat(policeSousPartie, tailleSousPartie, couleurSousPartie);
  222.  bouton_txt.setTextFormat(mon_format);
  223. }
  224. private function fonduApparition(cible:MovieClip, type:String):Void {
  225.  trace("Methode : fonduApparition : "+type);
  226.  var tempo:Number = getTimer()+tempoQuit;
  227.  var moi:Object = this;
  228.  var fondu:Boolean = false;
  229.  (type == "on" ) ? cible._alpha = 0 : cible._alpha = 100
  230.  cible.onEnterFrame = function () {
  231.   if(type == "on" ) {
  232.    this._alpha += 15;
  233.    if(this._alpha>100)
  234.     delete this.onEnterFrame;
  235.   } else if(type == "off" && (!moi.conteneurSousParties_mc.hitTest(_xmouse, _ymouse, false) or fondu == true) && getTimer()>tempo) {
  236.    fondu = true;
  237.    this._alpha -= 15;
  238.    if(this._alpha<0) {
  239.     delete this.onEnterFrame;
  240.     this.removeMovieClip();
  241.    }
  242.   }
  243.  }
  244. }
  245. private function chargeSrc(src:String):Void {
  246.  trace("Methode : chargeSrc" );
  247.  if(src != "" && src != "undefined" ) {
  248.   var swf_mc:MovieClip;
  249.   swf_mc = conteneur_mc.createEmptyMovieClip("swf_mc", 0);
  250.   swf_mc.loadMovie(src);
  251.  }
  252. }
  253. //------------- STYLES --------------//
  254. //Définir les styles des parties
  255. public function StyleParties(police:String,
  256.         taille:Number,
  257.         espace:Number,
  258.         couleur:Number,
  259.         couleurFond:Number,
  260.         couleurBordure:Number,
  261.         tailleBordure:Number,
  262.         courbeBordure:Number,
  263.         couleurFondOver:Number,
  264.         couleurBordureOver:Number):Void {
  265.  this.policePartie = police;
  266.  this.taillePartie = taille;
  267.  this.espacePartie = espace;
  268.  this.pos = espace/2;
  269.  this.couleurPartie = couleur;
  270.  this.couleurFondPartie = couleurFond;
  271.  this.couleurBordurePartie = couleurBordure;
  272.  this.tailleBordurePartie = tailleBordure;
  273.  this.courbeBordurePartie = courbeBordure;
  274.  this.couleurFondOverPartie = couleurFondOver;
  275.  this.couleurBordureOverPartie = couleurBordureOver;
  276. }
  277. //Définir les styles des sous parties
  278. public function StyleSousParties(police:String,
  279.          taille:Number,
  280.          espace:Number,
  281.          couleur:Number,
  282.          couleurFond:Number,
  283.          couleurBordure:Number,
  284.          tailleBordure:Number,
  285.          courbeBordure:Number,
  286.          couleurFondOver:Number,
  287.          couleurBordureOver:Number):Void {
  288.  this.policeSousPartie = police;
  289.  this.tailleSousPartie = taille;
  290.  this.espaceSousPartie = espace;
  291.  this.couleurSousPartie = couleur;
  292.  this.couleurFondSousPartie = couleurFond;
  293.  this.couleurBordureSousPartie = couleurBordure;
  294.  this.tailleBordureSousPartie = tailleBordure
  295.  this.courbeBordureSousPartie = courbeBordure;
  296.  this.couleurFondOverSousPartie = couleurFondOver;
  297.  this.couleurBordureOverSousPartie = couleurBordureOver;
  298. }
  299. }


 
 
et la déclaration de la classe :
 

Code :
  1. Création du menu
  2. //var monMenuH:menu = new menu('cible', 'chemin du menu', x, y, largeur, hauteur, 'orientation', tempo, profondeur);
  3. var monMenuH:menu = new menu(this, 'menu.xml', 0, 0, null, 18, "horizontal", 100, 0);
  4. //monMenuH.StyleParties('Police', taille, espace, couleur, couleurDeFond, couleurDeBordure, tailledeBordure, courbeCadre, couleurdeFondOver, couleurdeBordureOver);
  5. monMenuH.StyleParties("Verdana", 11, 10, 0x000000, 0xE0E2EB, 0xCCCCCC, 0, 0, 0xBBB7C7, 0xBBB7C7);
  6. //monMenuH.StyleSousParties('Police', taille, espace, couleur, couleurDeFond, couleurDeBordure, tailledeBordure, courbeCadre, couleurdeFondOver, couleurdeBordureOver);
  7. monMenuH.StyleSousParties("Verdana", 11, 18, 0x000000, 0xF8F8F8, 0xCCCCCC, 1, 5, 0xBBB7C7, 0xBBB7C7);
  8. //monMenuH.creerMenu();
  9. monMenuH.creerMenu();


 
avec la structure de l'xml :
 

Code :
  1. <menu>
  2. <partie nom="Utilisation" src="">
  3.  <souspartie nom="Mise en place" src="src/mise_en_place.swf" />
  4.  <souspartie nom="Les paramétres par défaut" src="src/defaut.swf" />
  5.  <souspartie nom="" src="" />
  6.  <souspartie nom="La source" src="src/source.swf" />
  7. </partie>
  8. <partie nom="Exemples" src="">
  9.  <souspartie nom="Menu vertical" src="src/exemple2.swf" />
  10.  <souspartie nom="Menu super méga kitch" src="src/exemple3.swf" />
  11. </partie>
  12. <partie nom="Evolution" src="">
  13.  <souspartie nom="Fonctionnalités en projet" src="src/projet.swf" />
  14.  <souspartie nom="A vous de participer" src="src/participer.swf" />
  15. </partie>
  16. <partie nom="A propos" src="src/a_propos.swf" />
  17. </menu>


 
Merci pour vos avis, c'est tres important pour moi.

Reply

Marsh Posté le 19-03-2006 à 01:18:15   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed