Code terminé

Code terminé - Flash/ActionScript - Programmation

Marsh Posté le 19-07-2006 à 18:09:32    

Bonjour les amis,
 
je ne viens pas demander ce qui cloche dans mon code mais plutot si il est correct.
Graphiste de formation, j'ai appris les bases de AS. Et le reste beaucoup d'autodidacte.  
Bref, je suis pas du tout au top niveau alors je voulais savoir si mon code était correct, si il y aurait des méthodes plus optimisés, plus propre etc ...
 
Le But :
Réalisé une carte pour un jeu de role en ligne. Quand on passe la souris dessus, la case ce grise et une petite fenêtre apparait dans laquel s'affiche la liste des batiments et leurs noms à cet endroit. (ce n'est pas encore intégré puisque la bdd n'existe pas encore, pour l'instant seul le n° de la case et du lorem ipsum)
A chaque batiment est associé un niveau (a, b, c, d etc ...) et une zone (de 0 à 219).
 
Ca donne ceci :
http://zedlefou.free.fr/img/map.swf
 
Et voici le code :

Code :
  1. var lvl = "A";
  2. _root.map_lvl.map_lvl_lettre.text = lvl;
  3. // Création des boutons
  4. this.createEmptyMovieClip("groBouton", 1);
  5. for (i=0; i<=21; i++) {
  6. for (j=0; j<=9; j++) {
  7.  var lvl = "2"+i+j;
  8.  if (i == "0" ) {
  9.   var clip = "bouton"+j;
  10.  } else {
  11.   var clip = "bouton"+i+j;
  12.  }
  13.  var lvl2 = "1"+i+j;
  14.  var coordx = 2+i*20;
  15.  var coordy = 2+j*20;
  16.  duplicateMovieClip(groBouton, clip, lvl);
  17.  // il va chercher un clip dans la bibliothéque et le met sur la scéne
  18.  this.attachMovie("boutonmap", clip, lvl2, {_x:coordx, _y:coordy});
  19. }
  20. }
  21. // Bouton clicable
  22. for (k=0; k<=219; k++) {
  23. this["bouton"+k].onRollOver = function() {
  24.  // joue le clip bouton
  25.  this.gotoAndPlay(2);
  26.  // On récup le n° du clip en enlevant 'bouton'
  27.  var lenom:String = this._name;
  28.  var lenom = lenom.substring(6, 9);
  29.  this.createTextField("my_txt", this.getNextHighestDepth(), 20, 20, 200,300);
  30.  var dutextenul:String = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit."
  31.  // On récup la valeur XML correpondant au batiment "lenom"
  32.  // !! A FAIRE !!
  33.  this.my_txt.text = lenom + dutextenul;
  34.  this.my_txt.fdt = new TextFormat();
  35.  this.my_txt.fdt.font = "Verdana";
  36.  this.my_txt.fdt.size = "10";
  37.  this.my_txt.fdt.multiline = true;
  38.  this.my_txt.fdt.display = block;
  39.  this.my_txt.fdt.embedFonts = true;
  40.  this.my_txt.setTextFormat(this.my_txt.fdt);
  41. };
  42. this["bouton"+k].onRollOut = function() {
  43.  this.gotoAndStop(1);
  44.  this.my_txt.removeTextField();
  45. };
  46. }
  47. // Changement de curseur
  48. _root.curseur.gotoAndStop(2);


 
Ah en fait il est pas tout à fait fini  :whistle:  
Il faut que je revoie le bloc texte qui affiche les batiments. Pour par qu'il sorte de la scéne d'abord et surtout je ne trouve plus le moyen d'envoyer le texte à la ligne. Si quelqu'un peut m'aider ...
 
Merci d'avance de vous pencher sur ce bout de code.  :hello:


Message édité par Zedlefou le 19-07-2006 à 18:19:09

---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks
Reply

Marsh Posté le 19-07-2006 à 18:09:32   

Reply

Marsh Posté le 19-07-2006 à 20:04:00    

jeux de rôle online = POO obligatoire. Arrête tout de suite le procédural, tu vas devoir jeter ton code dès que les fonctionnalités vont s'ajouter.
 
fait une classe Map, qui étend une classe TileMap, contenant des tas d'objets instanciés depuis une classe Tile.
 
l'interface de ta classe TileMap peut ressembler à ça (classe MapData = <structure de données parsée depuis le XML> ) :
- TileMap.setTiles(pMapData:MapData);
- TileMap.updateTiles(pMapData:MapData);
 
la classe Map qui étendrait TileMap (classe Vector indispensable de toute façon, à créer) :
- Map.moveTo(pDest:Vector);
- Map.rotateTo(pDest:Vector);
- Map.zoom(pFactor:Number);
- Map.unzoom(pFactor:Number);
 
Pour recevoir les données, utilises une classe pour ça (MapData par ex.), design-pattern du DataObject.
 
mc.rollOver = function() { ... } c'est crade, tu déclare la fonction au milieu du code, utilise une référence à fonction. Si tu suis une conception OO propre, tu finiras même avec un Delegate dessus.
 
_root à bannir totalement, utilise un adressage relatif à la place.
 
les méthodes du type this.attachMovie(), this.createEmptyMovieClip() renvoient un handler vers ce qu'elles viennent de créer, qu'il est de bon ton d'utiliser:
var mc:MovieClip = this.attachMovie('mc' , 'mc' + i , this.getNextHighestDepth());
 
regarde les bouquins de développement de jeux dans d'autres langages. ceux pour Flash ne sont pas terribles, c'est souvent une copilation de scripts procéduraux foireux. intéresse-toi plutôt à l'architecture logicielle en elle-même maintenant que tu as acquis la syntaxe. les architectures sont identiques dès que le langage est OO, que ce soit du C++, du Java ou de l'AS.  
 
si tu veux faire un jeu de rôle online en AS, tu passeras forcément par l'étape architecture logicielle/conception objet/UML, ça n'est pas "plus facile en Flash". La syntaxe et l'idiosyncrasie du langage le rende plus accessible, mais un développement reste un développement.


Message édité par craps_youpla le 19-07-2006 à 20:07:44
Reply

Sujets relatifs:

Leave a Replay

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