Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Même si l'IDE d'Adobe est payant
(et beaucoup trop cher pour un particulier comme vous et moi), il existe un logiciel gratuit appelé
Flex SDK, développé par Macromedia (l'ancien possesseur de Flash, racheté depuis par Adobe), qui possède un compilateur AS3 performant (en fait, c'est le compilateur standard pour l'AS3

).
Depuis le début, je ne parle que de l'Action Script 3, mais il est bien sûr évident que ce compilateur peut aussi gérer l'AS2 ! (et même quelques autres langages, qu'il utilise dans les compilations avancées, mais nous n'en parlerons pas !)
Dans ce tutorial, nous n'allons pas nous intéresser aux capacités de Flex SDK, mais uniquement à son compilateur.
Pour commencer, il va donc falloir télécharger ce compilateur dont je vous parle depuis dix minutes...
Vous le trouverez ici :
Citation : Conditions du Flex SDK
The Adobe® Flex™ 3 Software Development Kit (SDK) includes the Flex framework (component class library) and Flex compiler, enabling you to freely develop and deploy Flex applications using an IDE of your choice.
Une fois téléchargé, décompressez le tout dans un dossier quelconque... et voilà, vous en avez fini avec l'installation ! Vous avouerez que ce n'était pas très compliqué... la mauvaise nouvelle, c'est que ça ne va pas tarder à le devenir (compliqué, vous me suivez ?) !
Vous êtes maintenant en possession d'un superbe compilateur tout beau tout neuf, mais vous ne savez pas comment l'utiliser !
Pas de chance, je n'en ai aucune idée moi non plus. Au revoir donc !
Ce compilateur s'utilise en ligne de commande. Non non ! Ne partez pas tout de suite... Les vieux de la vieille de Windows se souviennent surement de la console. Il va y avoir des retrouvailles émues !
Quant à ceux qui utilisent Linux, des présentations ne s'imposent même pas, je crois !
Euh... comment je fais pour ouvrir la console ?
- Sous Win Me / XP : un clic sur démarrer, puis un clic sur exécuter, vous marquez "cmd". Welcome back to the old world
!
- Sous Windows Me / 98 / 95 : lancez le fichier command.com
- Sous Windows Vista : Cliquez sur démarrer, puis entrez directement "cmd" dans la barre de recherche.
- Astuce : Pour tous les Windows, vous pouvez aussi utiliser la combinaison de touches Windows - R, et marquer "cmd"
- Sous Linux : Comment ça ? Vous utilisez Linux et vous ne savez pas ouvrir une console ? Allez, zou ! C'est par ici...
N'utilisez pas une des vraies consoles (Ctrl-Alt-F(1~6))! Sinon l'étape de la compilation sera particulièrement fastidieuse (changements de résolution). Préférez donc un terminal, ou mieux, un éditeur de texte avec terminal intégré. (Kate, par exemple !)
Vous avez maintenant devant vous une superbe console

... il va falloir se déplacer jusqu'au dossier bin du dossier que vous venez de télécharger.
Pour cela, il faut utiliser la commande
cd ("
Change Directory"), qui permet de se déplacer dans l'arborescence du disque dur.
Dans mon cas, le dossier se situe presque à la racine...
Vous pouvez aussi indiquer directement le chemin absolu : C:\Users\Neamar\Flex SDK 3\bin dans cet exemple.
Attention aux caractères d'échappements ! Sous Windows, il faut mettre le nom du dossier entre ' " ', sous Linux il faut utiliser un \ devant les espaces.
ASTUCE : Vous pouvez appuyer sur Tabulation lorsque vous avez commencé à marquer le nom (Flex par exemple) pour que votre OS complète automatiquement le chemin du dossier.
En résumé, vous disposez maintenant d'un compilateur prêt à fonctionner... alors, qu'est ce qu'on attend pour continuer ?
Afin de ne pas jongler avec les OS, les manipulations qui suivent seront effectuées sous Windows.
Pas d'inquiétude : la marche à suivre est exactement la même sous Linux !
Pour cette partie, nous allons utiliser un fichier .as de test. Il n'a qu'une seule utilité : servir de test.
Afin que tout le monde soit d'accord, je vous donne ce fichier pour que vous puissiez faire des tests.
N'essayez pas encore de compiler un de vos anciens codes sources réalisés avec l'IDE ! Le nombre d'erreurs vous ferait pleurer, on en reparlera dans la prochaine sous-partie !
Code : Actionscript 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 | package
{
//Ne vous occupez pas de cette partie, je détaillerai plus tard
import flash.ui.Mouse;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
//Le code
public class souris extends Sprite
{
var curseur:Sprite = new Sprite();
function souris():void
{
var Map:Array = new Array();
var niveau:Sprite = new Sprite();
niveau.graphics.beginFill(0xFF0000,0.5);
niveau.graphics.drawRect(0,0,640,480);
stage.addChild(niveau);
niveau.addEventListener(MouseEvent.MOUSE_MOVE,SourisBouge);
curseur.graphics.beginFill(0x00FF00,0.5);
curseur.graphics.drawRect(0,0,20,20);
niveau.addChild(curseur);
}
function SourisBouge(evt:Event):void
{//Quand la souris bouge, déplacer curseur
curseur.x=mouseX-10;
curseur.y=mouseY-10;
}
}
}
|
N'oubliez pas que vous devrez recompiler après chaque modification d'un des fichiers composant votre application ! Au début, il vous arrivera souvent d'oublier cette étape...(et n'oubliez pas d'enregistrer avec ctrl-S !)
Enregistrez ce fichier (nommez-le
souris.as) dans un dossier "Sources" du répertoire bin.
Le but de ce code est très simple : créer un fond rougeâtre, et un carré vert qui suit la souris. Ne vous attardez pas sur le code, qui diffère surement de ce que vous connaissez dans votre IDE : on reparlera de tout ça plus tard !
Dans votre console, marquez la ligne suivante :
Code : Console | mxmlc "Sources/souris.as" |
Sous linux, vous aurez peut-être besoin de rajouter bash : (et d'enlever les guillemets)
Code : Console | bash mxmlc Sources/souris.as |
Appuyez sur Entrée...
Regardez dans votre dossier Source : un fichier
souris.swf s'est créé ! Miracle

!
Vous pouvez le lancer : il réagira comme n'importe quel swf, mis à part que vous n'avez pas déboursé 800? !
L'étape suivante ne sera pas forcément la plus drôle : je vous expliquerai comment modifier vos anciens codes pour les rendre compatibles avec ce compilateur. Même si aucune modification de fond n'est nécessaire (mis à part quelques rares cas, comme les interpolations complexes), cette tâche ne sera pas forcément drôle, voire même particulièrement em
merdbêtante ! Mais pas de soucis ! Je reste ici pour vous expliquer

!
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. Dans beaucoup de cas, le compilateur ne rechignera pas si vous ne mettez pas de point virgule, mais le jour où un problème arrivera, l'erreur renvoyée ne sera pas forcément claire. Alors, prenez tout de suite les bonnes habitudes : toutes les
instructions se terminent par un point-virgule !
2. Le typage
Cette opération est primordiale quel que soit le langage utilisé, mais l'IDE d'Adobe est assez (beaucoup trop à mon gout) laxiste sur ce point.
Typage : A quoi ça sert ?
Le typage, qu'est-ce que c'est ? C'est 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".
A première vue, ça peut paraitre inutile et évident. Détrompez-vous ! Le typage évite beaucoup d'erreurs. Ainsi, si vous essayez de mettre une chaine 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//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.
Je ne m'attarde pas trop sur ce sujet,
un superbe tutorial est disponible sur le Site du Zéro 
.
Comment typer en AS ?
Vous devez typer vos variables et vos fonctions.
Pour les variables, cela implique qu'il faut aussi les déclarer !
Quelques exemples de typage de variables :
Code : Actionscript1
2
3
4
5
6
7
8
9 | //Exemples corrects :
var MonNombre:uint=15; //Un nombre normal !
var MonString:String="Tuto"; //Une chaine 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 chaine de caractère
//Exemples incorrects :
var MonNombre:uint="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 chaine de caractère
|
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
}
|
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.
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 Sprites, 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 surement 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 !
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 des 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 de clips à accéder, 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 içi (attention : 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 classe 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 sources 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
}
}
}
|
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 !
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, Graphisme.as , Calculs.as...
Une fois crées, 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;
...
|
Ç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é !
Trace, vous connaissez ? Elle permet un
débuggage débogage (parait qu'en français, ça s'écrit comme ça, moi je suis pas compliqué

!), bref, cette fonction permet d'enlever facilement certains bugs de votre application.
Malheureusement, il s'agit d'un des ajouts de l'IDE. Pas d'IDE, pas de Trace !
Pas de panique ! Rien ne vous empêche de recréer une fonction trace, voire même d'améliorer l'ancienne.
Personnellement, j'utilise cette fonction : (inspirée du travail de Kisscoool).
Pour l'utiliser, il vous
suffit d'inclure le fichier trace.as...comme vous venez d'apprendre à le faire !
Cette fonction n'est pas aussi parfaite que celle inclue dans l'IDE : elle ne gère pas l'affichage des tableaux, par exemple. Vous êtes donc obligé de passer par un for each...
(Je le mets en secret pour ne pas prendre trop de place)
Secret (cliquez pour afficher)
Code : Actionscript 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 | var Trace_Main:Sprite = new Sprite();//Le conteneur principal
Trace_Main.addEventListener(MouseEvent.MOUSE_DOWN, Trace_StartDrag);
Trace_Main.scaleX=Trace_Main.scaleY=Trace_Main.alpha=.7;
addChild(Trace_Main);
var Trace_Texte:TextField=new TextField();
Trace_Texte.x = 5;
Trace_Texte.y = 5;
Trace_Texte.autoSize = "left";
Trace_Main.addChild(Trace_Texte);
var Trace_Reduire:Sprite = new Sprite();
Trace_Reduire.graphics.beginFill(0xFFFFFF,1);
Trace_Reduire.graphics.drawRect(0,0,10,10);
Trace_Reduire.addEventListener(MouseEvent.MOUSE_UP, Trace_Reduire_fct);
Trace_Main.addChild(Trace_Reduire);
function Trace(txt:String):void
{//La fonction principale, qui trace le texte passé en paramètre.
Trace_Texte.text = txt + "\r" + Trace_Texte.text;//\r indique un retour à la ligne.
setChildIndex(Trace_Main,numChildren-1);
}
//Les fonctions pour déplacer
function Trace_StartDrag(e:Event):void
{
Trace_Main.startDrag();
Trace_Main.addEventListener(MouseEvent.MOUSE_UP, Trace_StopDrag);
Trace_Main.removeEventListener(MouseEvent.MOUSE_DOWN, Trace_StartDrag);
Trace_Texte.selectable=false;
}
function Trace_StopDrag(e:Event):void
{
Trace_Main.stopDrag();
Trace_Main.removeEventListener(MouseEvent.MOUSE_UP, Trace_StopDrag);
Trace_Main.addEventListener(MouseEvent.MOUSE_DOWN, Trace_StartDrag);
Trace_Texte.selectable=true;
}
//Et pour supprimer la boite :
function Trace_Reduire_fct(e:Event):void
{
Trace_Main.visible=false;
Trace_Reduire.removeEventListener(MouseEvent.MOUSE_UP, Trace_Reduire_fct);
Trace_Main.removeEventListener(MouseEvent.MOUSE_DOWN, Trace_StartDrag);
Trace_Main.removeEventListener(MouseEvent.MOUSE_UP, Trace_StopDrag);
Trace_Main=null;
Trace_Texte=null;
}
|