Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Les bonnes pratiques en Flash

Compatible ActionScript 2. Cliquer pour en savoir plus sur les compatibilités.

Les erreurs à éviter

Lire la documentation française

Ici, on fait référence à la documentation française fournie avec flash. Celle-ci est criblée de bug, de “traduction” de code obsolète, … Si vous débutez en Actionscript, préférez la documentation anglaise que vous pourrez trouver sur le site de macromedia.

Les séquences

Les séquences sont sources de bugs et signe d'un manque d'optimisation de votre animation flash. Cela montre que vous pourriez dispatcher vos différentes séquences dans des fichiers que vous chargerez dynamiquement. Si vous deviez vraiment en avoir besoin, procédez de la manière suivant : sur la scène princpale de votre animation, faites en sorte que 1 keyframe = 1 séquences. Vous éviterez ainsi les bugs causés par celles-ci !

_root

_root = ciblage absolu, préférez utiliser this et _parent pour naviguer dans votre arborescance de clip

//mauvaise méthode
_root.monClip.autreClip;
 
//bonne méthode (à adapter suivant le clip dans lequel vous vous trouvez)
this._parent._parent.monClip.autreClip.

Il est dangereux de cibler en absolu car cela limite l'évolutivité du code. C'est pareil en HTML quand les médias externes sont ciblés via une url absolue, lors d'un changement de domaine tous les liens sont à refaire.

L'exemple le plus courant est celui d'une application (SWF) utilisée comme telle et puis lorsqu'un jour on le charge dans un autre SWF, le _root du SWF chargé va alors devenir celui du contenant et plus rien ne fonctionnera. Plus d'infos dans la FAQ et sur ce site !

on(), onClipEvent()

Ces 2 fonctions sont obsolètes à partir de Flash MX.

Le problème de ces 2 fonctions repose sur la déclaration directe de ce code sur les symboles se trouvant sur la scène ou à l'intérieur d'autres clips. En utilisant n'importe comment ce type de fonction, le code se retrouve perdu dans toute l'animation et il est très difficile ensuite d'assurer la stabilité et la cohérence de l'intégralité du code contenu dans toute l'animation.

Depuis FlashMX Flash propose une alternative par l'intermédiaire de la programmation événmentielle. Par exemple, il vous suffit donner un nom d'occurence à votre clip en passant par le panneau de propriété et d'attribuer les évènement onPress, onRelease, onEnterFrame, … sur une image clé se trouvant dans le scénario de votre animation.

this.monClip.onEnterFrame = function() {
  // vos instructions
}

Remarque : tous les événements de la classe MovieClip (TextField, Button, etc.) se retrouvent facilement dans le dictionnaire actionscript de flash et il ne faut surtout pas hésiter à la consulter avant de se lancer dans son travail.

Déclaration des variables

Il est impératif de déclarer ses variables c'est-à-dire d'indiquer à flash qu'une nouvelle variable va être créé et qu'elle portera le nom “leNomQueLonVeut”. La démarche à suivre est enfantine :

var maVar;

Cette déclaration ne doit être faite qu'une seule fois, contrairement à php, il ne faut pas marquer var avant le nom d'une variable à chaque fois que nous l'utilisons.

On peut voir dans la rubrique suivante que ces variables peuvent être typées.

Les intérêts de la déclaration des variables :

 1| Le code est plus clair, on sait quand la variable "arrive".

Si c'est la première fois que nous la rencontrons ou pas.

 2| Permet d'éviter les conflits de nom.

Si une variable non déclaré est utiliser pour la première fois dans une fonction et uniquement dans cette fonction , et qu'une autre variable n'ayant pas la même utilité porte le même nom, ceci engendrera un problème car les informations contenues dans chacune des variables risque être mélangées.

 3| Permet d'économiser des ressources, éléments si précieux sur le web.

En effet une variable déclarer dans une fonction n'existe que dans cette fonction, elle est créée au début de l'appel à cette fonction et est supprimée une fois tout le code de la fonction exécuté.

Voir le scope ou la porté d'une variable pour 2| et 3|.

Typage faible et typage fort

Le typage fort a été introduit avec AS2 dans Flash MX 2004. Mais le typage a toujours existé dans Flash, par exemple une chaine de caractère sera en général une variable de type string, un nombre une variable de type number, un booléen (true ou false) une variable de type boolean, etc.

var monTexte = "uneValeur" ; // type primitif string
var monNombre = 5 ; // type primitif number
var maClass = new MaClasse() ; // instance de la classe MaClasse >> type MaClasse

Reprenons l'exemple au dessus mais en utilisant cette fois ci le typage fort :

var monTexte:String = "uneValeur" ;
var monNombre:Number = 5 ;
var maClass:MaClasse = new MaClasse();

Voici un autre exemple avec le typage fort au niveau d'une fonction :

function somme ( n1:Number, n2:Number ):Number {
    return n1 + n2 ;
}
 
var result:Number = somme(2, 4) ;
trace (result) ;

Le typage fort s'identifie facilement dans le code avec la présence de l'expression :Type

Ce qui est intéressant avec l'ActionScript qui est basé sur le protocole ECMA262, c'est sa faculté a laisser libre le développeur de déclarer une variable sans devoir à chaque fois préciser le type de cette variable. Cette spécificité permet par exemple une grande souplesse dans le code que d'autres langages ne permettent pas.

D'un autre côté il est intéressant de pouvoir typer à l'avance certaines variables pour être notifié au moment de compiler votre travail de certaines incohérences dans le code. Par exemple si une fonction doit agire sur une chaine de caractère (une variable de type String), il serait totalement inintéressant que l'utilisateur cherche à passer en paramètre de cette fonction une variable de type Boolean … aussi le typage fort permet lors du debuggage de tester tout cela et d'éviter de rendre instable certains bout du code.

Ainsi depuis FlashMX 2004 la notion de typage fort et de typage faible est apparue. Permettant d'un côté de garder toute la souplesse de l'ECMAScript et de l'autre de pouvoir également s'assurer un debbugage plus fin dans l'optique d'un projet de plus ou moins grande envergure.

REMARQUE A noter dans FlashMX2004 un bug au niveau du typage fort sur le type Object. Il est donc conseillé de ne jamais typer une variable avec le type Object. Dans tous les cas vu que toute variable dans Flash hérite de la classe Object c'est pas trop grave d'oublier ce typage.

Le mauvais ciblage

Avant Flash MX, le ciblage devait se faire via eval ou pire encore via tellTarget ! Depuis Flash MX, vous pouvez (devriez) utiliser la synthaxe pointée. Essayez aussi d'éviter le ciblage avec les _level.

//proscrit
var clip = eval("this.monClip");
 
//recommandé
var clip = this.monClip;
 
//éventuellement
var clip = this["monClip"];

Les méthodes dépréciées

Pensez toujours à regarder dans la documentation flash (anglaise de préférence) lorsque vous avez un doute sur une fonction/méthode. Si celle-ci est marqué comme dépréciée, évitez à tout prix de l'utiliser et essayez de chercher une autre solution !

Les symboles

Evitez les symboles de boutons et de graphisme. Depuis Flash MX, tout est faisable uniquement avec les symboles de MovieClip qui sont beaucoup plus permissifs. Cela demande juste un peu plus de gestion coté code mais offre une très grande souplesse quant à la créativité et l'orginitalité de vos boutons !

Organisation d'un fichier Flash

Libération de mémoire

Garbage Collector ( explications, exemples )

Optimisation de la vitesse des scripts

Utilisez une variable pour vos boucles !

var aItems:Array = new Array("alpha","beta","gamma");
var total:Number = aItems.length;
for (var i:Number=0;i<total;i++) {
	trace (aItems[i]);
}

Cela évite à Flash de recalculer le nombre d'élements du tableau à chaque itération.

Raccourcis d'écriture

Gagner du temps lors de l'écriture

Convention d'écriture