Licence CC BY-NC-SA

Votre premier programme avec Flex SDK

Ce contenu est obsolète. Il peut contenir des informations intéressantes mais soyez prudent avec celles-ci.

Maintenant que vous en savez un peu plus sur Flash, il est grand temps de passer à la pratique et l'essentiel de ce cours : l'Actionscript 3 ! Vous aurez besoin d'outils pour suivre ce cours et appliquer ce que vous apprendrez (c'est très important), mais ne vous inquiétez pas, tous sont gratuits.

Le compilateur, qui servira à transformer votre code en animation est effectivement gratuit pour tout le monde, et même open-source ! Il s'agit de Apache Flex SDK, un don d'Adobe fait à la Fondation Apache.

Nous utiliserons également un logiciel facultatif pour nous aider à coder et à compiler nos projets, disponible hélas uniquement sous Windows.

Cette partie est un peu difficile, surtout si vous n'avez jamais programmé : accrochez-vous, relisez les parties que vous n'avez pas comprises ! La suite n'en sera que d'autant plus facile à appréhender. ;) La partie sur la compilation en ligne de commande est facultative si vous travaillez sur Windows et que vous êtes allergiques à la console…

Préambule

Le compilateur

Un compilateur est un programme très utile dans la plupart des langages de programmation. En réalité, vous vous doutez bien que l'ordinateur ne sait pas interpréter directement le code que nous lui écrivons : en effet, les langages de programmation ont été conçus pour être facilement utilisables par les êtres humains comme vous et moi. Or les ordinateurs ne comprennent que les instructions en binaire de bas niveau (cf. chapitre précédent). Il faut donc traduire nos programmes grâce au compilateur !

Le principe de la compilation

Certains langages de programmation sont interprétés par un logiciel faisant l'intermédiaire entre le code et l'ordinateur : on peut en général se passer de la compilation. C'est le cas de la plupart des langages utilisés sur Internet, comme le Javascript ou le PHP. Mais c'est aussi le cas de l'Actionscript ! :D

Mais alors, pourquoi doit-on compiler nos programmes écrits en Actionscript ?

En Actionscript 3, la compilation vous donne des informations sur vos erreurs de syntaxe pour que vous les corrigiez plus facilement, mais elle permet surtout de rassembler tout votre code et le contenu nécessaire au bon déroulement de votre programme (comme les librairies) dans un seul fichier. Ainsi, il est plus facile d'intégrer une animation Flash dans un site web, et il devient possible d'importer directement dans l'animation des images, des sons, des polices de caractères ou d'autres médias qui seront chargés en même temps que votre programme. En outre, le compilateur compresse votre animation afin qu'elle prenne moins de temps à se charger.

Ainsi, en Flash, le compilateur ne traduit pas votre code en binaire. À vrai dire, ce n'est qu'un demi-compilateur : il ne s'occupe que de lier plusieurs fichiers en un seul (opération appelée Édition de liens), alors que les compilateurs classiques traduisent également le code.

Le compilateur Flash

Le fichier qui est produit est en général au format swf (ShockWave Flash) ; c'est lui qui sera chargé par un navigateur Internet par exemple.

Le lecteur Flash

Donc il nous faut un logiciel pour que l'ordinateur comprenne notre code ?

Oui ! C'est là que le lecteur Flash (ou Flash Player en anglais) entre en scène. Ce logiciel contient un ensemble d'outils permettant d'exécuter votre programme : Flash Player est un interpréteur, et l'Actionscript est un langage interprété.

Le lecteur Flash

Tout ce processus se déroule à l'intérieur d'une machine virtuelle. Concrètement, Flash Player cache le système sur lequel votre programme tourne et gère lui-même la mémoire et les autres échanges nécessaires au bon déroulement de votre programme. Ainsi, ce dernier peut fonctionner correctement sur plusieurs systèmes d'exploitation (Windows, Mac, Linux, Android…) totalement différents. Entre autres, il dispose d'un compilateur à la volée, ou JIT (Just In Time) qui traduit en temps réel certains passages de votre code en binaire afin d'améliorer les performances.

Installation des outils

Ainsi, pour programmer en Actionscript, il nous faut plusieurs outils, dont un compilateur, et un lecteur Flash. Nous allons dès à présent nous occuper de tout cela !

Java

Java est une technologie similaire à Flash, développée initialement par Sun Microsystems (racheté par Oracle), qui regroupe un ensemble d'outils permettant de créer des applications. Or, le compilateur de Flash est écrit en Java : il faut donc que Java soit installé sur votre ordinateur. Si vous êtes certains que c'est déjà le cas, vous pouvez passer à l'étape suivante. Sinon, téléchargez et installez Java en suivant ce lien.

Le logo Java

Flex SDK

Le Flex SDK (Software Development Kit) est un ensemble d'outils de développement qui permettent entre autres de compiler des programmes écrits en Actionscript 1, 2 ou 3, et des applications Flex ou AIR.

Depuis 2011, Adobe a placé Flex sous licence Apache, par le biais de la Fondation Apache. Le Flex SDK est ainsi distribué maintenant sous l’appellation Apache Flex, et est donc un projet open source.

Le logo apache Flex

Nous verrons dans la dernière partie de ce chapitre, comment utiliser un logiciel nous permettant de développer en Actionscript sans utiliser la console de lignes de commande : il s'agit de Flashdevelop (Windows uniquement). Si vous ne voulez pas essayer de compiler avec la console et que vous êtes sous Windows, vous pourrez alors vous passer de la console pour compiler vos applications.

Tout d'abord, il vous faut disposer d'Adobe Air pour installer le SDK : télécharger Adobe Air. Suivez alors les instructions d'installation.

Ensuite, il faut que vous récupériez le SDK sur le site d'Apache : télécharger l'application d'installation de Apache Flex SDK.

Cliquez sur le bouton Download, lancez le téléchargement et allez prendre un café :

Page de téléchargement d'Apache Flex

Une fois le téléchargement terminé, installez et lancez l'application Apache Flex SDK Installer. Un écran de sélection de la version des différents composants du SDK s'affiche une fois l'application ouverte :

Application d'installation d'Apache Flex

Laissez les valeurs telles qu'elles sont : les dernières versions sont en effet sélectionnées par défaut.

Sur l'écran suivant, choisissez l'emplacement d'installation du SDK, de préférence un répertoire facilement accessible (votre dossier personnel par exemple) et nommez-le Flex SDK 4.

Ensuite, vous devez accepter les licences d'utilisation des différents composants du SDK en cochant les cases de la liste des composants :

Liste des composants du SDK

Le téléchargement et l'installation des composants débute alors. Une fois l'installation terminée, vous pouvez fermer l'application.

Pour les utilisateurs de linux, il faut installer Adobe AIR 2.6.0 pour pouvoir utiliser l'application d'installation de Flex SDK 4. Skype peut également entrer en conflit avec Adobe AIR, il faut alors le désinstaller.

Vous voilà armés d'un compilateur Flash gratuit ! Mais comment s'en sert-on ? Avec les lignes de commande pardi ! :lol: Pour les utilisateurs de Windows, il est grand temps de renouer une relation avec le terminal ! Pour Mac et Linux en revanche, cela ne devrait pas trop vous poser de problèmes…

Voici la marche à suivre pour lancer un terminal :

  • Windows : dans le menu démarrer, allez dans Tous les programmes, Accessoires, Invite de commandes, ou appuyez sur Windows+R et entrez cmd puis validez.
  • Linux : comment ça, vous ne savez pas ouvrir un terminal ? :-° Le gnome-terminal (Gnome) ou la Konsole (KDE) conviendront parfaitement.
  • Mac : dans le Finder, sélectionnez Applications, puis Utilitaires et enfin Terminal.

Sur Windows, il existe une alternative au terminal classique, bien plus complète et confortable, car elle se rapproche de ceux des systèmes d'exploitation Linux ou Mac. Il s'agit de Powershell ; pour le lancer, appuyez sur Windows+R, entrez powershell et validez. Désormais, vous pouvez par exemple appuyer sur TAB pour compléter automatiquement une commande ou un chemin, comme sur Linux ! :waw:

Maintenant, il va falloir se placer dans le dossier bin du SDK : utilisez la commande cd (Change Directory) pour vous déplacer dans l'arborescence de fichiers.

Windows

Linux

Mac

Version de débogage du lecteur Flash

Un deuxième outil va nous être indispensable : il s'agit d'une version légèrement différente du lecteur Flash habituel que l'on trouve dans les navigateurs Internet par exemple. En effet, ce Flash Player de débogage peut s'exécuter tout seul comme une quelconque application, et dispose surtout de fonctions de débogage très utiles. Par exemple, si un problème survient pendant que l'on teste notre programme, une fenêtre nous affichera les détails de l'erreur, la ligne incriminée et les différents appels de fonctions ayant conduit à cette erreur.

Vous pouvez dès à présent récupérer le lecteur. Il se trouve normalement dans le dossier Flex SDK 4/runtimes/player/11.1 (la version peut varier). Choisissez le lecteur qui convient à votre système, appelé Flash Player Debugger (dans le dossier lnx pour Linux, mac pour Mac et win pour Windows).

Sur Windows

Lancez le fichier FlashPlayerDebugger.exe une fois afin que les fichiers .swf soient automatiquement associés au Lecteur Flash :

FlashPlayerDebugger.exe

Sur Linux

Commencez par extraire l'archive flashplayerdebugger.tar.gz. Pour que son utilisation soit plus facile, et surtout parce que l'on en aura besoin un peu plus loin, vous pouvez déplacer l'exécutable flashplayerdebugger vers le dossier /usr/bin et le renommer en flashplayer :

1
sudo mv ~/Flex\ SDK\ 4/runtimes/player/11.1/lnx/flashplayerdebugger /usr/bin/flashplayer

Une fois le déplacement effectué, relancez votre console et replacez-vous dans le dossier Flex SDK 4/bin.

Sur Mac

Installez le lecteur Flash en double-cliquant sur l'installateur Install Adobe Flash Player Debugger 11.dmg :

Installation de Flash Player Debugger

Créer les sources

Vu que nous n'avons pas encore attaqué l'écriture de programmes en Actionscript 3, je vous ai concocté un petit code de test, qui va nous permettre de vérifier que votre installation fonctionne bien. ^^

Pour les utilisateurs de Windows, il est nécessaire de pouvoir enregistrer vos fichier dans n'importe quelle extension : sinon, il y a de grandes chances que Windows vous trahisse en sauvegardant votre fichier Test.as en Test.as.txt par exemple, sans que vous ne en rendiez compte ! Pour éviter cela, il faut désactiver une fonctionnalité de Windows qui masque la plupart des extensions : dans une fenêtre de l'explorateur de fichiers, aller dans le menu Options des dossiers, puis dans l'onglet Affichage, et décochez Masquer les extensions des fichiers dont le type est connu.

Commencez par créer un répertoire Sources dans le dossier bin, où l'on mettra les sources de nos futurs programmes. Dans le répertoire Sources, créez un nouveau fichier nommé Test.as et copiez-y le code ci-dessous en utilisant un éditeur de texte quelconque, tel que le Bloc-notes si vous êtes sous Windows.

  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
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
package
{
    // Programme de test

    // Fichiers nécessaires
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.filters.BlurFilter;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.ui.Mouse;
    import flash.display.Bitmap;
    import flash.events.MouseEvent;
    import flash.utils.Timer;

    // Le code
    public class Test extends Sprite {

        private var _bmp:Bitmap;
        private var _clock:Timer;
        private var _lastPosition:Point;

        public function Test() {
            addEventListener(Event.ADDED_TO_STAGE, Evt_added);
        }

        private function _init():void {
            stage.frameRate = 30;

            _bmp = new Bitmap(new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000));
            _bmp.cacheAsBitmap = true;
            _bmp.opaqueBackground = 0x000000;
            addChild(_bmp);

            _lastPosition = new Point(mouseX, mouseY);

            stage.addEventListener(MouseEvent.MOUSE_MOVE, Evt_mouseMoved);

            _clock = new Timer(60);
            _clock.addEventListener(TimerEvent.TIMER, Evt_frame);
            _clock.start();
        }

        private function _particle():void {
            var pX:int = mouseX;
            var pY:int = mouseY;

            var x0:int = _lastPosition.x;
            var y0:int = _lastPosition.y;
            var x1:int = pX;
            var y1:int = pY;

            // Tracé de la ligne (Bresenham)

            var error:int;

            var dx:int = x1 - x0;
            var dy:int = y1 - y0;

            var yi:int = 1;
            if( dx < dy ){
                x0 ^= x1; x1 ^= x0; x0 ^= x1;
                y0 ^= y1; y1 ^= y0; y0 ^= y1;
            }
            if( dx < 0 ){
                dx = -dx; yi = -yi;
            }
            if( dy < 0 ){
                dy = -dy; yi = -yi;
            }
            if( dy > dx ){
                error = -( dy >> 1 );
                for ( ; y1 < y0 ; y1++ ) {
                    _bmp.bitmapData.fillRect(new Rectangle(x1 - 4, y1 - 4, 8, 8), 0xffffff);
                    error += dx;
                    if( error > 0 ){
                        x1 += yi;
                        error -= dy;
                    }
                }
            }else{
                error = -( dx >> 1 );
                for ( ; x0 < x1 ; x0++ ) {
                    _bmp.bitmapData.fillRect(new Rectangle(x0 - 4, y0 - 4, 8, 8), 0xffffff);
                    error += dy;
                    if( error > 0 ){
                        y0 += yi;
                        error -= dx;
                    }
                }
            }

            _lastPosition.x = pX;
            _lastPosition.y = pY;
        }

        private function Evt_added(evt:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, Evt_added);
            _init();
        }

        private function Evt_mouseMoved(evt:MouseEvent):void {
            _particle();
        }

        private function Evt_frame(evt:TimerEvent):void {
            _bmp.bitmapData.applyFilter(_bmp.bitmapData, new Rectangle(0, 0, _bmp.bitmapData.width, _bmp.bitmapData.height), new Point(), new BlurFilter(4, 4, 2));
        }
    }
}

Compiler le programme de test

Pour compiler Test.as, revenez dans le terminal pour lancer le programme mxmlc contenu dans le dossier bin.

Windows

1
.\mxmlc.exe "Sources/Test.as"

Linux et Max

1
./mxmlc Sources/Test.as

Il est possible que vous ayez besoin des droits administrateurs sur Linux pour pouvoir compiler. Pour contourner le problème, essayez d'ajouter bash ou sudo avant la commande ./mxmlc.

Ensuite, appuyez sur Entrée pour lancer la compilation :

Windows

Linux

Mac

Après quelques instants et si tout s'est bien passé, un fichier Test.swf a été créé dans le dossier Sources ; il vous suffit de l'ouvrir avec le lecteur de débogage que nous avons téléchargé précédemment !

Sur Windows ou Mac

Double-cliquez sur le fichier Test.swf. Si jamais le lecteur Flash ne s'ouvre pas, choisissez-le avec la commande Ouvrir avec... ou dans la liste Sélectionner un programme installé.

Windows

Mac

Sur Linux

Entrez dans votre terminal :

1
flashplayer Sources/Test.swf

Linux

Si votre curseur laisse une traînée blanche et brumeuse, cela signifie que la compilation a réussi et que vous êtes prêts pour passer à la suite ! :)

Dis bonjour au monsieur

Nous allons maintenant écrire de A à Z notre premier programme Flash ! :) Commencez par créer un nouveau fichier Actionscript dans le répertoire Source, et nommez-le Hello.as.

Structure de notre programme

Un programme écrit intégralement en Actionscript, ce qui sera le cas durant ce cours, présente toujours la même structure : le code est obligatoirement mis dans des fonctions, elles-mêmes placées dans une classe, englobée par un paquet (on utilise alors le mot anglais package). Pour l'instant, il y a de grandes chances que les trois termes que je viens d'utiliser soient obscurs pour vous ; la seule chose importante à retenir est l'organisation de ces trois niveaux qui composent le code source de tout fichier Actionscript. Pas de panique : nous explorerons plus en détails chacune de ces notions plus tard dans le cours. ;)

Voici un petit schéma récapitulatif :

Structure d'un programme

Le package

Commençons par le plus simple : le package. Il est composé d'un nom facultatif et d'un bloc d'accolades. Nous utilisons le mot-clé package comme ceci :

1
2
3
package nom {

}

Un mot-clé (ou réservé) est une expression qui est utilisée par le langage et qui lui est donc réservée. Vous ne pourrez donc pas utiliser ce type de mots autrement que tels qu'ils ont été définis en Actionscript.

Le nom du package décrit la position de la classe dans l’arborescence des fichiers de votre projet. Effectivement, vous ne pouvez choisir vous-mêmes le nom du package : vous devez mettre le chemin relatif du fichier par rapport au fichier principal (celui que l'on compile avec la commande mxmlc vue plus haut), en séparant les dossiers par des points (à la place des slashes ou antislashes).

Par exemple, si votre fichier principal Hello.as se trouve dans le dossier source, et que vous créez un nouveau dossier ET dans lequel vous rajoutez un dossier telephoner, en y mettant un fichier Actionscript Maison.as qui est utilisé par votre programme principal, vous devrez écrire son package ainsi :

1
2
3
package ET.telephoner {

}

L’arborescence des fichiers est alors Sources/ET/telephoner/Maison.as.

Comment cela, on peut utiliser un autre fichier Actionscript depuis notre programme principal ?

Bien sûr ! C'est même très utile : il vaut mieux faire plusieurs fichiers bien triés (un dossier pour les utilitaires, un dossier pour le chargement de son…), que tout mettre dans un seul et unique fichier. Imaginez que votre programme fasse plusieurs centaines de milliers de lignes de code : il vous sera impossible de vous y retrouver ! :lol: Nous allons voir cette notion appelée importation de fichiers dans très peu de temps.

Qu'en est-il de notre fichier Hello.as ?

Très bonne question : pour le programme principal contenu dans le fichier que vous allez compiler avec la commande mxmlc, il n'y a pas de nom de package ! Et oui, il est déjà dans le dossier principal de votre projet, inutile donc de mettre un chemin.

Dans ce cas, le package s'écrit ainsi :

1
2
3
package {

}

Vous pouvez écrire ce code dans votre fichier vide si vous ne l'avez pas déjà fait ! ;)

Importer des fichiers Actionscript

Comme nous l'avons vu, importer des fichiers peut s'avérer très utile, voire vital dans la plupart des cas. L'importation est une instruction (ou une ligne de code si vous préférez) qui permet de rendre tout le code du fichier importé utilisable dans notre code. Il y a deux types de fichiers que vous pouvez importer : les fichiers contenus dans les packages de Flash (commençant par flash.), et vos propres fichiers. Dans les deux cas, on utilise le mot-clé import suivi du package du fichier à importer, son nom et un point-virgule :

1
import ET.telephone.Maison;

La plupart des instructions et lignes de code devraient être terminées par un point-virgule en fin de ligne. Je dis « devraient », car il est toléré d'omettre le point-virgule, mais c'est très fortement déconseillé : il est le symbole qui indique clairement la fin de votre ligne de code, et il est possible dans de rares cas que vous obteniez des erreurs à cause de cela. Votre ordinateur ne s'autodétruira pas si vous ne mettez pas les points-virgules, mais ce serait une très, très, très mauvaise habitude : si jamais vous voulez apprendre et utiliser un autre langage, vous oublierez constamment les points-virgules et maudirez le jour où vous avez décidé de ne pas suivre mon conseil… :-° Vous remarquerez qu'il ne faut pas mettre de point-virgule quand il s'agit de blocs de code délimités par des accolades ({ et }), comme pour le package que l'on vient de voir.

Les importations s'écrivent juste après avoir ouvert la première accolade du package :

1
2
3
4
5
package {

    import ET.telephone.Maison;

}

Pour notre programme, il va falloir importer un fichier standard de Flash : Sprite. Il est nécessaire pour toute application : nous détaillerons son utilité bien plus tard dans le cours, car il nous manque trop de notions actuellement. ;) Je peux tout de même vous dire que cela nous permet d'afficher le programme, et donc de le lancer : effectivement, tout programme Flash a besoin d'un affichage pour s'exécuter.

Je vous donne le code du fichier importé que vous devez avoir dans votre Hello.as :

1
2
3
4
5
package {

    import flash.display.Sprite;

}

Vous l'aurez sûrement compris, le package du fichier est flash.display (gestion de l'affichage).

La classe

Ensuite, vient la… Comment ça vous ne savez pas ? Retournez vite regarder le schéma juste au-dessus ! :colere2: Effectivement, dans le package, on trouve une classe. Cette notion est un concept très important de la programmation orientée objet que j'ai mentionné dans l'introduction. Encore une fois, il est trop tôt pour développer cette notion, mais rassurez-vous : une partie entière de ce cours est consacrée à l'orienté objet.

L'essentiel est de retenir que la classe est obligatoire et que sa syntaxe est la suivante : les mots-clés public class suivis du nom de la classe et d'un bloc d'accolades, comme pour le package.

1
2
3
public class NomDeMaClasse {

}

Attention ! Le nom d'une classe ne doit contenir que des lettres, et doit être identique au nom du fichier dans lequel elle se trouve (sans l'extension). De plus, il doit impérativement commencer par une majuscule : cela explique pourquoi tous nos fichiers Actionscript ont une majuscule depuis le début du cours ! :D

Étant donné que le nom du fichier est le même que celui de la classe de ce fichier, nous parlerons désormais de classe dans les deux cas.

Il existe une notation appelée Camel (chameau) ou CamelCase (notation chameau), très utilisée dans le monde de l'informatique. Je l'ai utilisée pour écrire NomDeMaClasse : chaque mot débute par une majuscule, comme des bosses de chameau ! Son utilité est purement esthétique, car cette notation améliore la lisibilité du code lorsque l'on ne peut pas utiliser d'espaces ou d'autres caractères spéciaux. C'est le cas ici avec le nom des classes. Je pense que c'est une bonne habitude à prendre, alors autant commencer tout de suite : avouez que si j'avais écrit Nomdemaclasse, ce serait beaucoup moins lisible ! :lol:

La classe se dispose juste après les importations de fichiers, comme ceci, pour notre fichier Hello.as :

1
2
3
4
5
6
7
8
package {

    import flash.display.Sprite;

    public class Hello extends Sprite {

    }
}

Les plus observateurs d'entre vous auront remarqué que j'ai ajouté deux mots derrière le nom de notre classe. Le mot-clé extends (étendre en anglais) permet d'utiliser la classe Sprite d'une manière un peu spéciale, comme nous le verrons dans la partie consacrée à l'orienté objet.

Les fonctions

Maintenant que notre classe est prête, il faut écrire une ou plusieurs fonctions pour pouvoir mettre du code dedans ! Une de ces fonctions est obligatoire, et elle porte un nom : il s'agit du constructeur de la classe. Devinez quoi ? C'est encore lié à l'orienté objet ! :lol: Pour faire simple, ce constructeur est automatiquement exécuté dans certains cas, lorsque l'on utilise une classe. Ici, le code à l'intérieur sera parcouru au lancement de notre programme. Pour écrire un constructeur, on utilisera les mots-clés public function suivis du nom de la classe, de parenthèses et d'un nouveau bloc d'accolades.

Pour notre classe Hello contenue dans notre fichier Hello.as, le constructeur ressemblera à ceci :

1
2
3
public function Hello(){

}

Et voilà ! Notre fichier est fin prêt pour que nous commencions (enfin) à coder !

Voici le code complet de notre fichier Hello.as pour que vous puissiez vérifier :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// Premier niveau : le paquet
package {

    // Les classes importées
    import flash.display.Sprite;

    // Deuxième niveau : la classe du fichier
    public class Hello extends Sprite {

        // Troisième niveau : la ou les fonctions

        // Constructeur de la classe
        public function Hello() {

            // Nous allons coder ici !

        }

    }
}

Commentez votre code !

Avez-vous remarqué que j'ai inséré du texte en français dans le code précédent, qui n'a a priori rien à faire là ? On appelle cela des commentaires. Vous pouvez y écrire absolument n'importe quoi, et pour cause : ils seront tout simplement ignorés lorsque vous lancerez votre programme. Vous vous demandez alors à quoi servent-ils ? La réponse est plutôt simple : commenter un code permet de s'y retrouver, même si nous avons nous-mêmes écrit le code en question. Imaginez que vous reveniez dessus quelques mois plus tard : s'il n'y a aucun commentaire, vous serez aussi perdu que si ce n'était pas vous le programmeur ! Cela peut même arriver dans un intervalle de quelques jours seulement. Et ce serait encore pire si vous souhaitiez que votre code soit lu ou utilisé par d'autres personnes… Mais attention, il ne s'agit pas non plus d'inonder votre code dans les commentaires : vous ne réussiriez qu'à le rendre encore plus illisible et incompréhensible ! Il faut trouver un juste milieu : commentez quand cela est nécessaire, pour décrire brièvement ce que fait un bout de votre programme, afin de vous en rappeler facilement plus tard.

Il existe deux types de commentaires : les commentaires en ligne et les commentaires multi-lignes.

Les commentaires en ligne

Ce sont des commentaires qui ne comportent qu'une seule ligne. On les débute par deux slashes, comme ceci :

1
// Voici un commentaire en ligne

Tout le texte suivant les deux slashes sera considéré comme du commentaire.

Vous pouvez mettre un commentaire en fin de ligne, sans gêner personne :

1
import display.Sprite; // Pour l'affichage

Les commentaires multi-lignes

Cette fois-ci, il est possible d'étaler notre commentaire sur plusieurs lignes. Pour cela, il faut débuter notre commentaire par un slash et une astérisque, et terminer explicitement le commentaire par une astérisque et un slash :

1
2
3
4
/* Ceci
  est un commentaire
  sur quatre
  lignes. */

Afficher un message dans la console

Avant toute chose, il est important de souligner que la technologie Flash n'a jamais été conçue pour être utilisée en lignes de commande : en effet, son objectif est de proposer des applications et des animations entièrement graphiques. Cela implique que l'on ne puisse qu'afficher du texte à la console (avec quelques efforts), et qu'il est impossible d'entrer des données au clavier via la console, comme en langage C par exemple.

C'est une fonction qui nous permettra d'afficher des messages dans la console : elle répond au doux nom de trace(), et est quasiment exclusivement utilisée pour le débogage des programmes Flash.

Cette fonction est accessible partout dans tout code Actioncript, sans rien à faire d'autre que de l'appeler.

L'appeler ? Comme mon chien pour partir en balade ?

Oui, on utilise le terme appeler lorsque l'on utilise une fonction : nous n'allons pas écrire du code entre les accolades de la fonction trace(), nous allons nous contenter de l'utiliser. En effet, son code est déjà prêt et fait partie du Lecteur Flash lui-même !

Pour l'utiliser, nous allons prendre presque la même syntaxe que celle du constructeur Hello (qui est lui aussi une fonction), sans le bloc d'accolades, et sans oublier le point-virgule (car il s'agit d'une instruction) :

1
trace("texte à afficher");

Entre les deux parenthèses, vous devez spécifier à la fonction trace() ce qu'elle doit afficher. Ce peut être du texte (délimité par des guillemets) ou un nombre. Par exemple, pour afficher 42 dans la console, nous écririons :

1
trace(42);

À vous de jouer ! Faites en sorte sans le tester que votre programme Hello soit capable d'afficher le grand classique « Hello world ! ». Souvenez-vous où il faut mettre les instructions dans le programme Hello que nous avons écrit jusqu'à présent ! ;)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
// Premier niveau : le paquet
package {

    // Les classes importées
    import flash.display.Sprite;

    // Deuxième niveau : la classe du fichier
    public class Hello extends Sprite {

        // Troisième niveau : la ou les fonctions

        // Constructeur de la classe
        public function Hello() {

            trace("Hello world !");

        }

    }
}

Place au test !

Compiler notre programme

Commençons tout d'abord par compiler Hello.as. Il y a une petite différence par rapport à tout à l'heure : cette fois-ci, il va falloir activer le mode débogage lors de la compilation, pour que l'on puisse afficher le message « Hello world ! » dans la console. Pour ce faire, ajoutons un paramètre lors de la compilation : -debug=true.

Sur Windows :

1
.\mxmlc.exe -debug=true "Sources/Hello.as"

Sur Linux :

1
./mxmlc -debug=true "Sources/Hello.as"

Et enfin, sur Mac :

1
./mxmlc -debug=true Sources/Hello.as

Encore une fois, il est possible que vous ayez besoin des droits administrateurs sur Linux pour pouvoir compiler. Pour contourner le problème, essayez d'ajouter bash ou sudo avant la commande ./mxmlc.

Si tout c'est bien passé, votre console devrait afficher quelque chose comme ceci :

Résultat de la compilation

Lancer le débogueur Flash

Pour pouvoir afficher les messages de la fonction trace(), il nous faut utiliser un autre outil à notre disposition : le débogueur Flash. En effet, Flash Player, même en version de débogage, ne peut pas afficher des messages en continu dans une console. Il se contente de les envoyer : le débogueur va alors se charger de récupérer les messages et de nous les présenter dans la console. Il s'agit du programme fdb qui devrait être dans le répertoire Flex SDK 4/bin :

Contenu du répertoire Flex SDK 4/bin

Lancez le programme dans votre console :

Sur Windows :

1
.\fdb.exe

Sur linux :

1
./fdb

Sur Mac :

1
./fdb

Un nouvel invité de commande, géré par fdb devrait apparaître :

Le nouvel invité de commande géré par fdb

Lancer notre programme

Tout d'abord il faut lancer une session de débogage, pendant laquelle le débogueur essayera de récupérer les messages de débogage du Lecteur Flash :

1
run

Le débogueur est ainsi en attente du Lecteur Flash : lancez votre programme en double-cliquant dessus, ou avec la commande que l'on a vu plus haut dans le cas de Linux. Le Lecteur Flash n'est cependant pas encore démarré, il ne devrait donc pas se passer grand-chose à l'écran. ^^

Une fois que la session est correctement démarrée, entrez cette commande dans fdb pour réellement lancer le programme :

1
continue

Miracle ! Notre trace("Hello world !"); a fonctionné, et le message est apparu dans la console ! :magicien:

Résultat de la fonction trace()

Une fenêtre blanche s'est ouverte : il s'agit de notre animation ! Pour l'instant, elle ne fait presque rien : nous remédierons à cela dans la suite du cours. ;)

Vous pouvez maintenant fermer votre programme. Si plus tard vous voulez quitter fdb, entrez cette commande :

1
quit

Vous pouvez également lister l'intégralité des commandes du débogueur avec cette commande :

1
help

Lorsque vous programmez en lignes de commande, je vous conseille d'ouvrir deux consoles : une pour la compilation à l'aide de mxmlc, et une autre pour le débogueur fdb. Cela vous évitera de quitter et relancer ce dernier à chaque compilation ; il vous suffira d'utiliser la commande run à chaque fois que vous voulez tester votre programme.

Il en faut des efforts pour déboguer en lignes de commande, mais une fois que vous avez pris le coup de main, c'est plus facile. ;) Mais pour se faciliter la vie, mieux vaut s'équiper avec les meilleurs outils ! En effet, il existe des éditeurs de code très facile d'utilisation qui intègrent également des outils prêts à l'emploi pour compiler et tester nos programmes !

FlashDevelop à la rescousse !

Pour Windows, il existe un très puissant éditeur pour programmer en Flash, et de plus, il est gratuit et libre : j'ai nommé Flashdevelop ! Flashdevelop est ce que l'on appelle un IDE (Integrated Development Environment, environnement de développement intégré en anglais) : c'est un logiciel contenant tout le nécessaire pour programmer dans un ou plusieurs langages (ici l'Actionscript, mais pas seulement). Vous allez voir : compiler sera désormais aussi simple que d'appuyer sur un bouton !

Téléchargement

Flashdevelop est donc disponible au téléchargement gratuitement, mais malheureusement la version officielle est réservée aux utilisateurs de Windows. Commencez par télécharger Flashdevelop à cette adresse. Il est possible, pour les utilisateurs d'un autre système d'exploitation d'utiliser une machine virtuelle, tant que les développeurs n'auront pas eu le temps d'adapter Flashdevelop à d'autres supports. Il existe également une alternative, basée sur le logiciel Eclipse. Rassurez-vous, le reste du cours ne porte pas sur Flashdevelop, vous pourrez tout faire sans ! ;)

Téléchargement de FlashDevelop

Installation

Une fois l'installateur de Flashdevelop téléchargé, lancez-le et appuyez sur Next.

Installation de FlashDevelop : étape 1

Cet écran nous permet de choisir d'installer ou non des composants supplémentaires, comme le Flex SDK. Pour éviter tout problème, nous allons laisser les options par défaut, mais vous pouvez décocher Install Flex SDK si vous l'avez déjà téléchargé et que vous êtes sûr de vous. Je vous conseille toutefois de laisser le programme installer le compilateur lui-même, pour éviter tout problème. Cliquez sur Next.

Installation de FlashDevelop : étape 2

Choisissez le dossier d'installation de Flashdevelop, puis cliquez une nouvelle fois sur Next.

Installation de FlashDevelop : étape 3

Allez prendre un café pendant l'installation ! :D

Installation de FlashDevelop : étape 4

Cliquez sur Finish pour terminer l'installation.

Installation de FlashDevelop : étape 5

Si Flashdevelop ne se lance pas tout seul, lancez-le. Vous arrivez sur l'écran d'accueil :

Page de démarrage de FlashDevelop

Vous pouvez fermer la page d'accueil en cliquant sur la croix correspondante :

Fermeture de la page d'accueil

Un peu de paramétrage

Si vous avez décoché Install Flex SDK lors de l'installation du logiciel, il faut lui dire où se trouve le Flex SDK que nous avions téléchargé au début avant de pouvoir l'utiliser : autrement, il ne pourra pas compiler notre projet, ce qui serait bien dommage. :D Ces manipulations vous seront également utiles si vous mettez à jour le Flex SDK plus tard.

Commençons par nous rendre dans les paramètres du logiciel, à l'aide du menu Tools :

Accès aux paramètres de FlashDevelop

La fenêtre des paramètres de Flashdevelop s'ouvre ; sélectionnez AS3Context dans la liste de gauche, puis Installed Flex SDKs dans le panneau de droite. Ensuite, cliquez sur le petit bouton avec trois points :

Paramètres de FlashDevelop

Le gestionnaire des SDK s'ouvre et est normalement vide. Nous allons ajouter notre SDK dans la liste : cliquez sur le bouton Ajouter en bas à gauche :

Éditeur de collections InstalledSDK

Un nouveau SDK est apparu dans la liste ! Il faut maintenant spécifier le chemin (Path) du SDK en le sélectionnant et en cliquant sur le petit bouton de droite à trois points :

Mise en place du SDK

Choisissez le dossier où vous avez placé le SDK au début du chapitre, par exemple D:\Flex SDK 4. Pour finir, validez en cliquant sur le bouton OK et fermez la fenêtre des paramètres à l'aide du bouton Close situé en bas à droite.

Créons un projet Actionscript

Pour pouvoir programmer sereinement au même endroit durant le cours, il nous faut créer un projet Actionscript 3. Pour cela, allez dans le menu Project de la barre de menus en haut, et cliquez sur New Project.

Création d'un nouveau projet

Une nouvelle fenêtre apparaît, proposant plusieurs types de projets. Sélectionnez AS3 Project et donnez un nom à votre projet dans le champ Name. Vous pouvez demander à Flashdevelop de vous créer automatiquement un dossier pour votre projet, en cochant la case Create directory for project.

Paramétrage du nouveau projet

Validez et notre projet est prêt ! Flashdevelop a créé pour nous les dossiers et fichiers de base qu'il faut pour commencer à travailler sur notre programme Flash. Sélectionnez le panneau Project en bas à droite : il nous affiche l'arborescence de notre projet.

Arborescence du projet

Le dossier bin doit contenir tous les médias qui seront chargés à l'exécution de notre programme (pour l'instant, nous allons le laisser tel qu'il est). C'est aussi le dossier où notre fichier SWF sera créé à la compilation. Le dossier lib sert à regrouper tous les médias et librairies que vous pourriez importer dans votre programme, comme je l'ai expliqué au tout début du chapitre. Laissons-le vide également. Enfin, le dossier src contient tous les fichiers de code qui composent notre programme. Étendez-le, et vous verrez que Flashdevelop a créé pour nous un fichier Actionscript principal (reconnaissable à la petite flèche verte), qu'il a nommé Main.as. Double-cliquez dessus pour l'ouvrir dans l'éditeur.

Bien utiliser Flashdevelop

Avoir de bons outils ne suffit pas : il est primordial de bien savoir les utiliser ! Ainsi, avant de tester notre projet, il est préférable de faire un tour du propriétaire.

L'interface

L'interface de Flashdevelop, bien qu'en anglais, est plutôt claire et surtout très pratique. Détaillons-la ensemble.

L'interface de FlashDevelop

1. La barre de menu

Toutes les fonctionnalités de Flashdevelop sont accessibles dans ces menus.

  • File (Fichier) : vous trouverez ici toutes les commandes en rapport avec les fichiers, comme la création de nouveaux documents, la sauvegarde, l'impression…
  • Edit (Édition) : ce deuxième menu concerne le texte que vous tapez dans l'éditeur. Vous pouvez ainsi facilement annuler des modifications, copier-coller du texte, commenter du code sélectionné…
  • View (Affichage) : ici, vous pouvez modifier la présentation de Flashdevelop, et ré-ouvrir les panneaux que vous auriez malencontreusement fermé.
  • Search (Recherche) : si vous voulez effectuer des recherches de texte dans votre document ou dans le contenu des fichiers de votre projet, passez par ce menu !
  • Debug (Débogage) : ce menu est un peu plus technique et concerne les sessions de débogage que vous effectuerez dans Flashdevelop (comme avec fdb). Nous en reparlerons plus tard.
  • Project (Project) : tout ce qui touche à la gestion de vos projets, comme la création, l'ouverture, mais aussi pour tester votre projet actuel.
  • Insert (Insertion) : ici vous pouvez insérer du texte spécial dans votre document, comme l'heure actuelle (timestamp) ou une couleur entre autres.
  • Refactor (Refactorisation) : derrière ce terme barbare se cachent les opérations automatiques de maintenance et de mise en forme de votre code afin de le retravailler pour qu'il soit plus clair (Code formatter). Dans Flashdevelop se trouvent également des outils de génération de code pour travailler plus vite (Code generator).
  • Tools (Outils) : ici vous trouverez des outils pour le développement en Flash, et plusieurs fenêtres de paramétrage du logiciel.
  • Macros : il s'agit de scripts à lancer dans le logiciel pour automatiser certaines tâches ; toutefois nous n'aborderons pas les macros de Flashdevelop dans ce cours.
  • Syntax (Syntaxe) : dans ce menu, vous pouvez spécifier à Flashdevelop dans quel langage vous êtes en train de coder, afin qu'il puisse colorier le code de manière adéquate. En général, on n'utilise pas ce menu, car Flashdevelop détecte le type de chaque fichier à l'aide de son extension.
  • Help (Aide) : ce menu regroupe toutes les aides disponibles pour Flashdevelop, et permet également de vérifier les mises à jour du logiciel.

2. La barre de raccourcis

Les commandes les plus utilisées sont rassemblées ici pour pouvoir les utiliser directement, sans avoir à passer par les menus.

3. Les raccourcis de débogage

Cette zone de la barre des raccourcis est réservée aux boutons utiles pour compiler notre projet (Build Project), le tester (Test Project) et changer le mode de débogage (choisir Debug revient à ajouter le paramètre -debug=true au compilateur du Flex SDK comme nous l'avons vu plus haut).

4. L'éditeur de texte

C'est ici que vous écrirez vos programmes. À gauche sont affichés les numéros des lignes, et en haut se trouvent les différents documents ouverts sous forme d'onglets.

5. Les panneaux de développement

Ce sont des outils qui vous faciliteront la vie lorsque vous programmerez.

6. La console de sortie

Dans ce panneau seront affichés tous les messages de Flashdevelop (comme l'état de la compilation par exemple) et les messages du lecteur Flash (par exemple, avec la fonction trace()).

L'auto-complétion

Cette fonctionnalité est très utile et vous l'utiliserez en permanence pendant que vous programmerez : en effet, elle peut terminer ce que vous êtes en train de taper à votre place (toujours dans une optique de gain de temps), et peut également vous aider à choisir quoi taper grâce aux informations qu'elle propose.

Commençons par compléter notre classe Main : placez-vous dans la fonction _init après le commentaire // entry point (point d'entrée) et commencez à taper trace. Surprise ! Un menu s'ouvre au bout du quatrième caractère, vous proposant d'ajouter la fonction trace(), avec en bonus sa description ! :magicien:

Auto-complétion de la fonction trace()

Pour valider votre choix, appuyez sur Entrée, et le mot trace est automatiquement terminé ! Bien entendu, cela n'a pas une grande utilité dans notre cas, car le nom de la fonction est très court. Mais imaginez si vous aviez à retenir toutes les fonctions, et en plus si leur nom fait vingt caractères !

Il est également possible d'activer l'auto-complétion à tout moment, même si l'on n'a rien encore tapé : il suffit d'appuyer simultanément sur les touches Ctrl et Espace.

Compiler et tester notre projet

Terminez votre ligne de code pour que votre programme affiche « Hello world ! » dans la console. Comment ça, vous ne vous souvenez plus comment faire ? :colere2: Bon d'accord, je vous donne la ligne à ajouter, mais c'est bien parce que c'est vous :

1
trace("Hello world !");

Voici à quoi doit ressembler le fichier après modifications :

 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
package {
    import flash.display.Sprite;
    import flash.events.Event;

    /**
     * ...
     * @author Guillaume
     */
    public class Main extends Sprite {

        public function Main():void {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            trace("Hello world !");
        }

    }

}

Mais, pourquoi le code est différent par rapport à tout à l'heure ?

Très bonne question ! Flashdevelop, en créant notre projet, a automatiquement rempli cette classe avec le code de base de telle sorte qu'il n'y ait aucun problème pour nous. Les fonctions qu'il a rajouté sont utiles dans certains cas pour éviter des erreurs d'affichage. Retenez qu'il faut commencer à programmer juste après le commentaire // entry point seulement dans notre classe Main. Dans les autres classes que vous créerez, ce code supplémentaire ne sera pas nécessaire.

Une fois que votre classe Main est prête, lancez la compilation en cliquant sur le bouton en forme de flèche bleue (Test Project) dans la barre des raccourcis ou en appuyant simultanément sur les touches Ctrl et Entrée. Vous remarquerez qu'il y a un bouton Build Project immédiatement à gauche, qui ne sert qu'à compiler notre projet sans le lancer.

Si tout ce passe bien, une fenêtre du lecteur Flash s'ouvre avec votre programme, et la console affiche notre message « Hello world ! » :

Lancement du programme

C'est aussi simple que cela !


En résumé

  • L'opération de vérification des erreurs, d'assemblage des différents fichiers et de compression d'un projet s'appelle la compilation.
  • Le Flex SDK est un ensemble d'outils de développement, et notamment un compilateur permettant d'aboutir au fichier swf.
  • FlashDevelop est un IDE, c'est-à-dire un outil qui permet d'écrire, de compiler et de tester du code Actionscript plus facilement.
  • En Actionscript, le code s'écrit à l'intérieur de fonctions, elles-mêmes contenues dans une classe, le tout placé dans un package.
  • Il est possible d'insérer des commentaires au milieu du code grâce aux caractères « // », « /* » et « */ ».
  • Il existe une fonction trace() qui permet d'écrire du texte dans la console, et est principalement utilisée pour les étapes de débogage.