Cette partie intéressera aussi les heureux propriétaires de l'IDE !
1. Le point-virgule
Commençons par les choses simples : toutes vos instructions doivent se terminer par un point-virgule. Il n'est pas vraiment obligatoire (sauf si vous mettez plusieurs instructions sur la même ligne), mais il indique au compilateur où sont les fins de ligne, et il clarifie la lecture de votre code. Bref, prenez l'habitude de le mettre, ça ne coute pas grand chose !
2. Le typage
Cette opération est primordiale quel que soit le langage utilisé, mais l'IDE d'Adobe est assez laxiste sur ce point.
Typage : à quoi ça sert ?
Le typage, qu'est-ce que c'est ? Cela consiste tout simplement à donner un type à une variable.
Par exemple, c'est dire
"Toi, tu es une variable qui contient forcément un chiffre, je vais donc indiquer à l'ordinateur que tu n'es autorisée à ne recevoir que des chiffres".
À première vue, ça peut paraître inutile et évident. Détrompez-vous ! Le typage évite beaucoup d'erreurs. Ainsi, si vous essayez de mettre une chaîne de caractères dans une variable numérique, le compilateur vous en avertira, alors que sans typage, la compilation s'effectuerait sans problème. Sauf que quand vous lancerez le fichier, l'ordinateur pourra être appelé à faire des calculs bizarres, comme
sinus(2*"Bonjour"+3.1415). Personnellement, je ne sais pas faire ce type de calcul...

Le problème, c'est que l'ordinateur non plus n'en a aucune idée : il y aura donc erreur, et bugs sur tous les appels de cette variable, ou de cette fonction. Pas cool !
En plus, en typant vos variables, l'ordinateur sait dès le début que telle variable ne contiendra que des chiffres : il n'aura donc pas besoin de faire des changements de type complexes ! C'est tout bénéf' pour la rapidité / propreté de votre code.
Enfin, quand vous commencerez à manier des types plus complexes et assez abstraits, tels que Function, Class, Dictionary, ou tout simplement vos propres classes, vous serez heureux que le compilateur vous indique les appels de méthodes ou de propriétés inexistantes.
Je ne m'attarde pas trop sur ce sujet,
un superbe tutoriel est disponible sur le Site du Zéro 
.
Comment typer en AS ?
Vous devez typer vos variables, mais aussi vos fonctions.
Pour les variables, cela implique qu'il faut aussi les déclarer !
Quelques exemples de typage de variables :
Code : Actionscript 1
2
3
4
5
6
7
8
9
10 | //Exemples corrects :
var MonString:String="Tuto"; //Une chaîne de caractère
var niveau:Sprite = new Sprite(); //Un type un peu plus complexe : le sprite
var MonString2:String="126"; //Le nombre est entouré de guillemets : il est donc considéré comme une chaîne de caractères
//Exemples incorrects :
var MonNombre:int="Tot"; //le compilateur renverra : C:\Users\Neamar\Flex SDK 3\bin\Sources\souris.as(18): col: 25 Error: Contrainte implicite d'une valeur du type int vers un type sans rapport String.
var MonString:String=126; //Une chaîne de caractères
|
Il y a une multitude de types :
Array,
MovieClip,
Point,
Line... j'en passe, regardez
la documentation AS3 !
En plus des variables, vous devez aussi typer vos fonctions ! Dès que vous utilisez l'instruction
return, votre fonction a un type : celui de la variable retournée ! Le type s'indique de la même façon que pour les variables : "
Nom_De_La_Fonction(parametre:type_parametre):[type]".
Si une fonction ne renvoie rien (on parle alors de procédure), vous devez quand même la typer : puisque votre fonction ne renvoie rien, elle sera de type
void, ce qui signifie
néant en anglais.
Des exemples ?
Code : Actionscript1
2
3
4
5
6
7
8
9 | function SourisBouge(evt:MouseEvent):void //Pas de return : on marque donc void
{
//La suite de la fonction
}
function Addition(nb1:uint,nb2:uint):uint //Les paramètres aussi doivent êtres signés
{
return nb1+nb2; //L'addition de deux nombres donne un nombre : on peut donc utiliser uint
}
|
Bon à savoir : le type void n'est pas essentiel à la compilation, mais son oubli génèrera un Warning :
Warning: return value for function Pas de déclaration de type pour affecterMission.
Il existe aussi le type étoile, qui type une variable n'importe comment : var i:* (i peut alors contenir un objet, un long, un string...).
Essayez de le bannir au maximum ; normalement, vous n'en aurez jamais besoin, sauf si vous utilisez des classes dynamiques (elles aussi, tentez de les éviter !)
3. Les packages
Voilà le point qui fâche...
Qu'est-ce qu'un package ? Il s'agit d'un ensemble de fichiers qui contiennent les définitions de certaines fonctions.
Lorsque vous compilez manuellement, vous
devez inclure les packages que vous utilisez.
Regardez le code de
souris.as :
Code : Actionscript 1
2
3
4
5
6
7
8
9
10
11
12
13 | package
{
import flash.ui.Mouse;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
public class souris extends Sprite
{
[...]
}
}
|
Je vais donc vous parler de ces
import.
En soi, rien de bien complexe : si vous utilisez des évènements de la souris (
MouseEvent.MOUSE_MOVE, par exemple), vous devez inclure
flash.events.MouseEvent.
Si vous utilisez des
Sprite, vous devrez marquer
import flash.display.Sprite... et ainsi de suite.
Mais... comment je fais pour trouver le bon package ?
A priori, ce n'est pas compliqué, le seul problème étant de trouver le package quand l'instruction n'a pas un nom en rapport.
Une petite étude de cas ?
Citation : VousJe veux cacher mon curseur de souris avec la méthode
hide(). Quand je compile, j'obtiens une erreur : j'ai donc besoin d'inclure un package... mais lequel ?
Après avoir farfouillé dans l'aide de Flash, je découvre une catégorie
Mouse qui semble intéressante. Encore deux-trois liens, et hop !
flash.ui.Mouse. C'est exactement ce qu'il me fallait ! Je n'ai plus qu'à inclure le package...
Comme vous le voyez, ça reste très artisanal :
l'aide de Flash sera indispensable dans votre recherche de packages.
4. Les formes
Quand vous utilisiez l'IDE, vous avez sûrement pris l'habitude d'utiliser en permanence l'outil de dessin vectoriel. Dans ce cas-là, j'ai deux nouvelles pour vous : une bonne et une mauvaise. Je commence par laquelle ? Allez, la mauvaise !
La mauvaise nouvelle, c'est que cette option n'est pas disponible avec ce compilateur. Il vous sera donc impossible de redessiner vos superbes vaguelettes à la souris...
La bonne nouvelle, c'est que tout n'est pas perdu ! Regardez le code-source de
souris.as :
Code : Actionscript1
2
3 | curseur.graphics.beginFill(0x00FF00,0.5);
curseur.graphics.drawRect(0,0,20,20);
niveau.addChild(curseur);
|
Comme vous voyez, ce que vous faisiez à la main est faisable en code ! Fini le WYSIWYG, bienvenue au code !
Vous apprendrez à connaitres les fonctions de la classe
Graphics...
C'est là l'inconvénient majeur de ce compilateur : alors que l'IDE de Flash est complètement orienté vers le graphisme, ce compilateur est beaucoup plus tourné vers le code. Au final, ça revient au même, puisque l'IDE se contente de transformer de façon transparente vos formes en code, mais pour vous, c'est beaucoup plus lourd. Impossible de développer une superbe application graphique en quelques minutes !
Il reste cependant possible d'utiliser un IDE libre sur le net pour le dessin vectoriel... il suffit après d'exporter vos créations en .swc et de les inclure dans les options de compilation.
5. La TimeLine
Je crains d'avoir encore une mauvaise nouvelle à vous annoncer !
Malgré de nombreuses recherches, je n'ai pas trouvé comment créer une frame en code. Et il semble admis sur les forums que les frames n'existent pas dans Flex. Bilan : vous allez devoir faire une croix sur cette
Timeline.
Attendez ! Ne partez pas... réfléchissons ensemble : quel est l'intérêt de ces frames ?
- Les animations de début // de fin => Faux ! Maintenant que vous réalisez toutes vos animations en code, ces anims seront incorporées dans votre code-source. Pas d'accès aux clips, donc pas besoin de frames !
- Les preloaders => Là, vous marquez un point ! Effectivement, Flash attend normalement que la première frame soit chargée pour afficher le .swf. Si vous n'avez qu'une seule frame, il vous sera donc impossible de réaliser une petite barre de chargement.
Malheureusement, il n'y a pas de solutions simples à ce problème. Vous pouvez le contourner en utilisant un LoaderFlash qui chargera votre .swf complet, ou vous pouvez utiliser la méthode décrite ici (en anglais, et demande un certain niveau de compétence ! Entraînez-vous un peu avant d'aller voir ça). Une troisième solution existe, avec les classes tween. Je ne m'attarde pas là-dessus, car je n'en sais pas beaucoup plus.
Citation : L'aide de Flash"vous obtiendrez des performances nettement supérieures en utilisant Shape plutôt que Sprite ou MovieClip"
Si vous avez besoin d'un objet qui sera le conteneur d'autres objets d'affichage (que vous ayez ou non l'intention de dessiner en ActionScript dans cet objet), choisissez l'une des sous-classes de DisplayObjectContainer :
* Sprite si l'objet doit être créé en ActionScript uniquement, ou servira de classe de base à un objet d'affichage qui sera uniquement créé et manipulé en ActionScript,
* MovieClip si vous créez une variable pour pointer sur un symbole de clip créé dans Flash.
Ça y est, vos anciens codes-source devraient se compiler.
Ah non ! Il vous manque encore une notion...
6. Enchâssez-moi tout ça !
Votre code-source
doit être contenu dans une classe.
Voilà donc la structure standard d'un fichier
.as :
Code : Actionscript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | package
{
//les importations de package
public class [NOM_DU_PROGRAMME] extends Sprite
{
//Variables publiques
function [NOM_DU_PROGRAMME]():void
{
//Le constructeur principal, qui est appelé au démarrage du programme. En simplifiant, on pourrait dire qu'il est l'équivalent de la fonction main en C/C++
}
function MaFonction1(Parametre1:Type,Parametre2:Type):Type
{
//Les fonctions annexes
}
}
}
|
Le mot clé extends indique que la classe hérite de Sprite. Par défaut, AS3 n'as pas d'héritage multiple, en revanche, vous pouvez utiliser Implements pour simuler le comportement voulu.
IMPORTANT : les noms de la classe et de la fonction de départ doivent être les mêmes que le nom du fichier. Si votre fichier s'appelle anticonstitutionnellement.as, votre classe devra comporter public class anticonstitutionnellement extends Sprite ! Et ce pour toutes vos classes.
Mais... C'est moche ! Toutes les fonctions dans le même fichier ? Ça va être un sacré bordel !
Qui a dit que vous deviez tout mettre dans le même fichier ? Ah oui ! Moi

... oubliez ça, alors !
Vous pouvez parfaitement créer des fichiers annexes qui contiennent des fonctions.
Ainsi, rien ne vous empêche de créer un fichier
Evenements.as, un
Graphisme.as , un
Calculs.as...
Une fois créés, vous pouvez les inclure très facilement, en utilisant la fonction
include dans la fonction de départ.
Code : Actionscript 1
2
3
4
5
6
7
8
9
10 | public class Editeur extends Sprite {
function Editeur():void {
include "Trace.as";
include "Place.as"
Place_Cible = DeleteCursor
include "Editeur_Graphics.as";
include "HitTesteur.as";
var i:uint,j:uint;
...
|
Et n'oubliez pas non plus qu'ActionScript est un langage orienté objet, et qu'en conséquent, vos classes devraient rarement dépasser les 300 lignes. Si il y a plus de lignes, faites plus de classes !
Je ne m'attarde pas sur les package : ils ne sont pas très importants pour les petites applications, et embrouillent l'esprit si on les présente trop tôt. Si un jour vous ressentez le besoin de trier vos classes (parce que vous en avez quarante, par exemple), vous pourrez chercher à en savoir plus !
Ça y est !
Vous en avez fini avec cette sous-partie assez longue, je dois l'avouer ! (Mes doigts fument encore d'avoir tapoté le clavier sans rémission.)
Allez courage, plus que quelques lignes et c'est terminé !