Cet article ne traitera pas actionscript3 qui met en place des évolutions majeures dans les processus de travail. Il sera abordé dans des billets ultérieurs.
Depuis actionscript2, il est possible de créer de véritables classes au sens POO du terme. On y parle aussi de package (même s’ils ne représentent en fait qu’une structure de dossiers et de fichiers *.as [4]). Le chemin d’accès à ces packages doit être configuré au niveau de Flash afin d’inclure ces morceaux de code lors de la compilation.
On remarque déjà que ces classes vont pouvoir être réutilisées pour différents projets... mais attendez ! On va pouvoir en plus hériter et implémenter des interfaces au sens java (pas des interfaces graphiques donc), indépendamment de la vue en place.
L’idée ici n’est pas de vous refaire un cours sur le développement de classes, mais plutôt le moyen de séparer les actions sur Flash.
Alors, voyons tout de suite comment ça peut marcher... comme dit plus haut, il est important que programmeurs et designers communiquent entre eux. Pourquoi ? Parce que du côté des classes (donc produites par le développeur), on va devoir prendre le contrôle des éléments graphiques (donc faits par le graphiste) qui sont dans la bibliothèque [5] ou sur la scène [6]. Et pour cela, il faut en connaître la structure.
1:/**
2:* @author Yan Paquis
3:* @version 0.1
4:*/
5:
6:class com.cleverage.view.SpecialButton {
7:
8: private var _view : MovieClip;
9: private var _text : TextField;
10: private var _activity : Boolean;
11:
12: public function SpecialButton(v:MovieClip, l:String) {
13: _view = v;
14: _text = _view.libelle_mc.libelle_txt;
15: _text.text = l;
16 setActivity(true);
17: }
18:
19: /**
20: * permet de gérer le rollover
21: * @param b indique si le bouton est actif ou non
22: */
23: public function setActivity(b:Boolean):Void {
24: _activity = b;
25: var btn:SpecialButton = this;
26: if (_activity) {
27: _view.onRollOver = function() {
28: btn._text.textColor = 0xFF0000;
29: btn._view.gotoAndStop(2);
30: }
31: _view.onRollOut =
32: _view.onReleaseOutside = function() {
33: btn._text.textColor = 0x000000;
34: btn._view.gotoAndStop(1);
35: }
36: } else {
37: delete _view.onRollOver;
38: delete _view.onRollOut;
39: delete _view.onRelease;
40: delete _view.onReleaseOutside;
41: }
42: }
43:
44:[...]
45:
46:}
Cette classe n’est pas complète et pourrait être faite autrement, mais les premiers principes sont là.
Elle pourra être instanciée par un new SpecialButton() à qui il faut passer des paramètres. On voit en ligne 14 que le second paramètre passé au constructeur est une chaine qui va être envoyée à un champs texte.
Pour illustrer notre discussion, nous avons écrit en dur le chemin d’accès à l’occurrence du TextField qui se trouve dans le movieclip référencé par la variable privée _view.
Cela signifie que cette classe peut permettre la gestion automatisé des rollovers de tout élément graphique qui pourra répondre à cette structure.
Dans la réalité, elle n’aurait un intérêt qu’avec des fonctionnalités supplémentaires.
Le flash ci-contre montre un exemple d’utilisation. On a 3 occurrences de clips différents sur la scène.
On a fait un new SpecialButton() pour chacun en passant les paramètres adéquats. En testant, on se rend compte que les rollovers fonctionnent, le texte passe en rouge (ligne 28) et les clips passent à leur deuxième image (ligne 29) quand elle existe.
Le deuxième bouton par contre n’a pas de texte ??? Il illustre l’erreur de nommage dans la structure du clip. Cette erreur n’est pas bloquante et ne peut se révéler à la compilation, mais pose un problème sur la vue, puisque le bouton ne porte pas de libellé.
Actionscript1 permettait déjà la création d’objets par le biais des prototypes, l’implémentation en était plus lourde.
Le code se retrouvait soit sur la scène [6] ou dans les clips [1]. Sinon il fallait lier des fichiers *.as par des directives d’inclusion dans le fichier flash.
La programmation sous AS2 répond partiellement à la norme ECMAScript4. Sa syntaxe s’approche de Java avec beaucoup de limitations, dont certaines n’existent plus sous AS3. Voici un aperçu des possibilités avec AS2.
Des ouvrages spécialisés en font des descriptions beaucoup plus détaillées, l’un des plus célèbres étant le livre de Colin MOOCK.
Grâce à cette syntaxe AS2, on s’aperçoit que l’on va pouvoir concevoir les applications Flash de manière différente. On peut évoquer les design patterns puisqu’il est tout à fait possible de créer des Singletons, d’utiliser le modèle Observer, de concevoir et réaliser en MVC et d’autres choses encore... qui changent la logique initiale de Flash qui voulait contrôler tout au même endroit.
On peut donc faire pas mal de choses, mais le plus important c’est de savoir que beaucoup ont déjà été faites.
Il existe déjà en effet divers framework/APIs open source dédiés à différentes tâches.
Leur utilisation est simple : installer les packages, définir le classpath au niveau de flash ou de l’application en cours de réalisation et utiliser « import » pour accéder aux classes.
Sitons-en quelques-uns pour AS2 :
La logique de Flash change : cet outil n’est plus seulement une application de graphisme vectoriel animé (même si on continue à l’utiliser ainsi pour des bannières, ...) .
Le taux de pénétration des players en version 8 et 9 est proche des 99% . Donc, même si Adobe est en position de monopole sur ce marché, force est d’avouer qu’il faut compter avec Flash car, d’un point de vue purement graphisme/animation, les applications Ajax/Dhtml ou SVG ne peuvent complètement rivaliser et, d’un point de vue parts de marché, SilverLight est loin d’être à la hauteur.
Dans de prochains volets, nous essaierons de contourner certains points problématiques liés à l’utilisation de Flash. Pour cela nous pourrons évoquer les sujets suivants :
[1] Clip, movieclip : un élément flash qui contient sa propre timeline et sa propre scène. Il peut se jouer indépendamment du reste de l’animation
[2] Timeline : axe des temps exprimé en images et cadencés à un nombre d’images affichées par secondes
[3] POO : Programmation Orientée Objet (OOP en anglais)
[4] Fichiers *.as : des fichiers de texte brut qui contiennent du code actionscript
[5] Bibliothèque : l’espace de stockage de l’animation. Elle contient des symboles graphiques dont on va placer des occurrences sur la scène (à la main ou via du code)
[6] Scène : élément de base d’une animation flash qui accueille tous les éléments sur un espace en 2 dimensions suivant une timeline. Tout clip possède sa propre scène.