Etude des API Java pour la génération de code Flash

publicité
IPST-CNAM
39, allées Jules Guesde
BP 61517
31015 Toulouse cedex 6
CONSERVATOIRE NATIONAL DES ARTS ET METIERS
CENTRE REGIONAL DE TOULOUSE
EXAMEN PROBATOIRE
DU DIPLOME D’INGENIEUR CNAM
en
INFORMATIQUE
par
Nicolas Botet
Etude des API Java pour la génération
de code Flash
Date de la soutenance : novembre 2007
Membres du jury :
Président : Professeur Dewez
Examinateur : Professeur Hadj Batatia
Probatoire CNAM 2007 – Nicolas Botet
Index
I. Introduction .............................................................................................................................4
II. Flash ...................................................................................................................................... 5
A. Présentation........................................................................................................................ 5
1. Introduction..................................................................................................................... 5
2. Histoire............................................................................................................................ 5
3. Pourquoi Flash ?..............................................................................................................7
4. Evolution de Flash.......................................................................................................... 8
B. Description technique......................................................................................................... 9
1. Création d’un document SWF.........................................................................................9
2. Utilisation d’un document SWF................................................................................... 11
3. Le fichier SWF.............................................................................................................. 13
4. Le langage Action Script ...............................................................................................17
5. Fonctionnement du lecteur Flash.................................................................................. 19
III. La génération de code par les API JAVA .......................................................................... 21
A. Introduction...................................................................................................................... 21
B. Les API ............................................................................................................................ 22
1. Metaas 0.7 API .............................................................................................................. 22
2. JavaSWF2..................................................................................................................... 27
3. Transfom SWF .............................................................................................................. 34
4. Translate AS1 ................................................................................................................ 39
5. JSwiff............................................................................................................................ 46
C. Comparaison des différentes API ..................................................................................... 51
1. Mise à jour de l’API...................................................................................................... 51
2. Utilisation en fonction de la version Flash....................................................................51
3. Les licences................................................................................................................... 53
4. En résumé...................................................................................................................... 53
IV. Conclusion ......................................................................................................................... 55
V. Bibliographie ....................................................................................................................... 56
Etude des API java pour la génération de code Flash - Page 2/59
Probatoire CNAM 2007 – Nicolas Botet
Table des illustrations
Illustration 1 : Les utilisations les plus courantes de Flash.........................................................6
Illustration 2 : Portabilité de Flash.............................................................................................7
Illustration 3 : Construction d’un fichier Flash à partir de Flash CS3.......................................9
Illustration 4 : Construction d’un fichier Flash à partir de Flex 2............................................10
Illustration 5 : Utilisation statique d’un fichier SWF...............................................................11
Illustration 6 : Utilisation dynamique d’un fichier SWF avec compilation.............................11
Illustration 7 : Utilisation dynamique d’un fichier SWF sans compilation..............................12
Illustration 8 : Tag à en-tête court (enregistrement de moins de 63 bytes)..............................14
Illustration 9 : Tag à en-tête long (enregistrement de 63 bytes ou plus)..................................14
Illustration 10 : Schéma représentant le modèle de programmation du lecteur Flash.............19
Illustration 11 : Fiche récapitulative de l’API Metaas 0.7.......................................................22
Illustration 12 : Exemple d’utilisation de l’API Metaas 0.7....................................................22
Illustration 13 : Illustration de l’exemple utilisant l’API Metaas 0.7......................................26
Illustration 14 : Fiche récapitulative de l’API JavaSWF2.......................................................27
Illustration 15 : Exemple d’utilisation de l’API JavaSWF2....................................................27
Illustration 16 : Illustration de l’exemple utilisant l’API JavaSWF2.......................................32
Illustration 17 : Fiche récapitulative de l’API Transform SWF...............................................34
Illustration 18 : Exemple d’utilisation de l’API Transform SWF............................................34
Illustration 19 : Résultat de l’exemple utilisant l’API Transform SWF..................................37
Illustration 20 : Illustration de l’exemple utilisant l’API Transform SWF..............................37
Illustration 21 : Fiche récapitulative de l’API Translate AS1..................................................39
Illustration 22 : Exemple d’utilisation de l’API Translate AS1...............................................39
Illustration 23 : Illustration de l’exemple utilisant l’API Translate AS1.................................44
Illustration 24 : Fiche récapitulative de l’API JSwiff..............................................................46
Illustration 25 : Exemple d’utilisation de l’API JSwiff...........................................................46
Illustration 26 : Création du fichier swf dans l’exemple utilisant l’API Transform SWF.......49
Illustration 27 : Résultat « tutorial.swf » dans l’exemple utilisant l’API Transform SWF.....49
Illustration 28 : Illustration de l’exemple utilisant l’API JSwiff.............................................50
Illustration 29 : Fiche récapitulative des API étudiées...........................................................54
Etude des API java pour la génération de code Flash - Page 3/59
Probatoire CNAM 2007 – Nicolas Botet
I.Introduction
Les technologies liées aux développements d’applications ne cessent d’évoluer. Hier nous
parlions d’applications client/serveur, aujourd’hui, nous parlons d’applications riches où l’on
retrouve une ergonomie proche des applications classiques bureautiques exécutées de façon
asynchrone sur le poste client.
Cette étude porte sur « l’étude des API java permettant la génération de code Flash ». Il existe
d’autres API, pour d’autres langages de programmation. Ce sujet est précis quant à la
technologie utilisée tout en restant vague, sur la finalité et le cadre de son application. En
effet, l’étude portera sur les API Java permettant la génération et l’utilisation de la technologie
Flash.
Flash permet l’affichage vectoriel et est destiné à l’utilisation du multimédia surtout autour
des technologies du web. Il est très utilisé pour développer des bandeaux publicitaires, des
jeux, des sites Internet ou bien des applications web. Cependant, le format du fichier reste
propriétaire même si il est ouvert et qu’une évolution se fasse ressentir notamment pour la
machine virtuelle de l’action script, donnée à la fondation Mozilla.
D’un autre côté, java, est un langage libre et portable. Il est très utilisé pour le développement
d’applications notamment client serveur. Une multitude d’API ont été développées pour java,
ce qui le rend plus puissant et lui permet d’évoluer. Un de ses inconvénients est la lourdeur de
son exécution notamment pour les applications client serveur. Posséder un ordinateur et un
réseau performant est recommandé. Le code compilé est ensuite exécuté sur la machine
virtuelle JAVA. Il existe différents moyens d’exécuter une application java : sur un serveur,
en local, par le biais d’une applet. Quoiqu’il en soit, l’installation de la machine virtuelle sera
nécessaire.
Les deux technologies étudiées nécessitent pour fonctionner un lecteur (plugin) ou une
machine virtuelle. Cependant, que ce soit Java ou Flash, ces environnements de
développements offrent aux développeurs une multitude de solutions afin de développer des
applications. Dans le cadre de ce sujet nous nous intéresserons aux développeurs JAVA qui
souhaitent publier dynamiquement ou non des animations Flash, permettant un fort potentiel
graphique, portable, sans utiliser d’applications Adobe mais en utilisant JAVA.
Dans un premier temps, nous ferons une présentation de la technologie Flash afin de mieux
appréhender la deuxième partie, qui est l’étude des API java.
Etude des API java pour la génération de code Flash - Page 4/59
Probatoire CNAM 2007 – Nicolas Botet
II.Flash
A.Présentation
1.Introduction
Le mot « Flash » peut avoir plusieurs définitions.
Il peut désigner :
 un logiciel de programmation ( Adobe flash )
 une machine virtuelle permettant de lire les fichiers flash
 un fichier Flash dont l’extension est « SWF ».
Un fichier Flash est lisible par le biais d’un lecteur Flash qui se présente sous la forme d’un
plugin du navigateur Internet ou bien sous forme d’un programme à installer sur le système
d’exploitation. Le plugin est la forme la plus répandue.
2.Histoire
En 1996, la société Macromédia achète à la société « Future Wave » un logiciel d’animation
vectoriel qu’elle commercialisera sous le nom de Flash 1.0.
Au fil du temps, la version du logiciel Flash 1.0 a évolué, pour proposer des animations au
lancement de plus en plus rapide, la création du langage « Action Script », un lecteur
permettant la visualisation de fichier « SWF » sur des périphériques embarqués.
Le 3 décembre 2005, la société Adobe Systems achète Macromédia et tous ses produits.
Aujourd’hui, Adobe Systems propose :







Le runtime Flash (gratuit) : pour exécuter des contenus au format SWF au sein de
pages Web (approche RIA)
Le futur runtime Apollo (gratuit) : pour exécuter des contenus au format SWF à partir
d’une application embarquée (approche RDA)
L’environnement Flash CS3 (payant) : pour développer des contenus SWF statiques
L’environnement Flex Builder 2, basé sur Eclipse (payant) : pour développer des
contenus SWF dynamiques, en fonction du contexte utilisateur
Le Flex 2 SDK (gratuit) : pour générer les contenus SWF dynamiques à partir d’un
serveur
Le composant serveur Flex Charting 2 (payant) : pour générer des graphiques à la
volée
Le composant serveur Flex Data 2 services (payant) : pour l’intégration à des données
de type Back Office
Chacun de ces outils propose aux développeurs une solution de développement permettant la
réalisation d’une simple animation à une application complexe.
Etude des API java pour la génération de code Flash - Page 5/59
Probatoire CNAM 2007 – Nicolas Botet
Illustration 1 : Les utilisations les plus courantes de Flash
Etude des API java pour la génération de code Flash - Page 6/59
Probatoire CNAM 2007 – Nicolas Botet
3.Pourquoi Flash ?
La technologie Flash est très attrayante car elle permet de créer des animations web grâce à
l’utilisation du multimédia et la création d’application web offrant un design intéressant.
Cette utilisation du multimédia est permise grâce au lecteur flash, embarqué entre 70% et 97%
selon les sources 1 dans les navigateurs web, qui permet une lecture du fichier SWF.
L’utilisation de cette technologie présente les intérêts et les inconvénients suivants :
a)Avantages




Le lecteur Flash est léger.
Il permet le Streaming
Il est portable : le lecteur Flash Player 9 peut être installé sur différents systèmes
d’exploitation (Microsoft, Unix, Mac OS) et sur les browsers les plus courants
(Internet Explorer et Firefox). Grâce au lecteur Flash Lite 2.1, il permet également son
exécution sur des clients type PDA.
Le code exécuté est compilé : le code exécutable est un fichier binaire au format SWF
exécuté par le plugin (lecteur Flash). Ce procédé permet une plus grande efficacité lors
de l’exécution du fichier car :


Il est téléchargé intégralement avant d’être exécuté
Il n’a pas besoin d’être analysé par le browser (VS JavaScript)
Illustration 2 : Portabilité de Flash
b)Inconvénients




1
Installation d’un plugin
Sécurité car l’exécution du fichier se fait en local sur l’ordinateur
Référencement du site suite à une interprétation partielle par le navigateur
Le code source est propriétaire
Sources : Macromedia, NPD, Webhits
Etude des API java pour la génération de code Flash - Page 7/59
Probatoire CNAM 2007 – Nicolas Botet
4.Evolution de Flash
Flash, extrêmement populaire, propose une gamme complète de produits. A ce titre, Adobe
est concurrencé par les logiciels libres et par d’autres concurrents comme Microsoft.
Pour mieux se positionner, Adobe ouvre le code source de Flex sous licence MPL 1 et donne
également à la fondation Mozilla le code source de la machine virtuelle ActionScript 3
disponible sous trois licences : MPL, GPL, LGPL. Tout ceci afin de travailler avec Mozilla
pour faire évoluer plus vite la norme EcmaScript 2 tout en évitant la concurrence de Flex par
OpenLazlo.
Afin de ne pas perdre un certain monopole et une avance sur ses produits, Adobe va proposer
un nouvel environnement d’exécution orienté R.D.A3, Appolo ou A.I.R 4.
De ce fait, certains produits vont évoluer vers de nouvelles versions. C’est le cas pour Flex2
qui va évoluer vers Flex3 et une troisième version du lecteur Flash9 sera bientôt disponible.
Adobe pourra proposer un mélange de Flash, HTML et PDF au sein d'applications de bureau.
Les langages utilisés ne devraient pas changer (ActionScript3).
1
M.P.L. : Mozilla Public License
EcmaScript : langage de programmation de type script développé dans le cadre des travaux de l'ECMA
(javascript)
3
R.D.A. : Rich Desktop Application
4
A.I.R. : Adobe Integrated Runtime
2
Etude des API java pour la génération de code Flash - Page 8/59
Probatoire CNAM 2007 – Nicolas Botet
B.Description technique
1.Création d’un document SWF
a)La création d’un document SWF
Un document SWF peut être créé de plusieurs façons :


Par le biais d’un outil de développement (Flash CS3, Flex Builder 2)
Par la génération de code :
o Génération automatique SWF
o Compilation Action Script
Utilisation du logiciel Flash CS3
Dans le cadre d’un développement à l’aide du logiciel Flash CS3, à contrario de la génération
de code par le biais d’un langage de programmation, le développeur travaille sur un fichier
« .fla ».
Ce fichier contient 3 types d’informations :



Les objets multimédia : représente les différents objets comme les graphiques, le texte,
le son et la vidéo
Le scénario : indique à Flash quand faire apparaître les objets multimédia
Le code action script : code de programmation qui permet de proposer des interactions
avec les utilisateurs et de contrôler le comportement des documents Flash.
Illustration 3 : Construction d’un fichier Flash à partir de Flash CS3
Le fichier « .fla » sera compilé en Byte Code pour obtenir un fichier « .swf », qui sera lu par
un lecteur Flash.
Etude des API java pour la génération de code Flash - Page 9/59
Probatoire CNAM 2007 – Nicolas Botet
Utilisation du logiciel Flex 2
Dans le cadre d’un développement à l’aide de l’outil de développement Flex2, le développeur
utilisera du code Action Script et du code MXML 1.
Exemple de composantes nécessaires au développement par Flex :


Le code Action Script : code de programmation qui permet de proposer des
interactions avec les utilisateurs et de contrôler le comportement des documents Flash
Le code MXML : surcouche d’Action Script3 permettant d’utiliser des feuilles de
styles, des composants, du code au format AS3, etc
Illustration 4 : Construction d’un fichier Flash à partir de Flex 2
b)Les fichiers liés aux applications Flash








Les fichiers FLA : ils contiennent les informations de base sur les médias, le scénario
et les scripts d'un document Flash.
Les fichiers SWF : Fichiers affichés dans une page Web.
Les fichiers AS sont des fichiers ActionScript.
Les fichiers SWC contiennent les composants Flash réutilisables.
Les fichiers ASC servent à stocker le code ActionScript qui sera exécuté sur un
ordinateur exécutant Flash Communication Server.
Les fichiers JSFL sont des fichiers JavaScript qui permettent d'ajouter de nouvelles
fonctionnalités à l'outil de programmation Flash.
Les fichiers FLP sont des fichiers de projet Flash (Flash Professionnel uniquement).
Les fichiers MXML : permettant l’utilisation de composants.
Dans cette étude, nous nous consacrerons aux fichiers « SWF » et « AS ».
1
MXML : langage créé par Adobe/Macromédia basé sur le format texte XML
Etude des API java pour la génération de code Flash - Page 10/59
Probatoire CNAM 2007 – Nicolas Botet
2.Utilisation d’un document SWF
Le domaine d’utilisation de Flash est vaste, il va servir au publicitaire afin d’afficher une
publicité animée dans un site, créer des jeux, développer des applications clients serveur etc.
Nous allons pouvoir classer l’utilisation d’un document Flash dans deux catégories :


Utilisation statique : création d’un document SWF dont on ne modifiera pas le
comportement sans le recompiler (ex : encart publicitaire)
Utilisation dynamique : création d’un document SWF dont on modifiera le contenu
soit par compilation soit par l’utilisation d’une base de données ou d’un fichier
extérieur
Ensuite, nous allons nous intéresser aux différents moyens de modifier et d’utiliser un
document SWF. Le document SWF sera recompilé ou non :
Utilisation statique
Illustration 5 : Utilisation statique d’un fichier SWF
Utilisation dynamique

Compilation :
o Coté serveur, possibilité de générer des fichiers SWF
Illustration 6 : Utilisation dynamique d’un fichier SWF avec compilation
Etude des API java pour la génération de code Flash - Page 11/59
Probatoire CNAM 2007 – Nicolas Botet

Sans compilation :
o Le document sera modifié grâce à une base de données
o L’utilisation de fichiers extérieurs (AS, texte)
o Passage de variable au moment de son lancement dans le navigateur web
Illustration 7 : Utilisation dynamique d’un fichier SWF sans compilation
Etude des API java pour la génération de code Flash - Page 12/59
Probatoire CNAM 2007 – Nicolas Botet
3.Le fichier SWF
a)Présentation
Le fichier SWF (prononcé « swiff ») a été étudié pour distribuer des animations multimédia,
au sens large du terme, sur Internet.
Rendu de l’affichage : étudié principalement pour l’affichage, il gère l’anti-aliasing, un rendu
rapide de bitmap quelque soit le format de la couleur, des animations et des boutons
interactifs.
Extensible : grâce à son principe de tag, le fichier est évolutif et compatible avec des lecteurs
plus anciens.
Conçu pour le réseau : les fichiers peuvent être transmis sur un réseau lent et de mauvaise
qualité. Les fichiers sont très compressés et supportent le streaming
Simplicité : le format est simple pour que le lecteur soit petit et facilement portable. Le lecteur
dépend de très peu de fonctionnalités du système d’exploitation.
Indépendance : les fichiers peuvent être affichés sans aucune dépendance de ressources
externes.
Universalité : peut s’exécuter sur des moniteurs ayant une résolution et une vitesse de
rafraîchissement différentes. Le fichier pourra être exécuté sur une machine à faible potentiel
comme tirer le meilleur d’une machine très performante.
Rapidité : les fichiers ont été étudiés pour avoir un rendu d’une excellente qualité le plus
rapidement possible.
b)Concept de base
Un fichier Flash, dont l’extension est « SWF » et le type MIME 1 « application/x-shockwaveflash », contient plusieurs séquences de données délimitées par des tagues. Le fichier SWF est
un fichier binaire.
Chaque fichier commence par un tag « header » suivi par une séquence de tag décrivant
comment l’animation est affichée puis se termine par un tag « end ».
Le tag « header » identifie :






1
le type : 3 premiers bits
la version du fichier Flash : 4ième bit etc.
la longueur du fichier du fichier
la taille en TWIPS
le nombre de « frame » par seconde
le nombre total de « frame »
MIME : Multipurpose Internet Mail Extensions
Etude des API java pour la génération de code Flash - Page 13/59
Probatoire CNAM 2007 – Nicolas Botet
Apres le « Header », les tags suivants sont des séries de blocs de données. Chaque bloc à un
type de tag et une longueur
Field
Type
Commentaire
Tag
UB[10]
Tag id
Length
UB[6]
Longueur du tag
Illustration 8 : Tag à en-tête court (enregistrement de moins de 63 bytes)
Field
Type
Commentaire
Tag
UB[10]
Tag id
Long Header Flag
UB[6]
Always 0x3F
Length
UI32
Longueur du tag
Illustration 9 : Tag à en-tête long (enregistrement de 63 bytes ou plus)
(1)Type de tag
Il existe deux catégories de tag :


Tag de définition : ils sont utilisés pour décrire les formes, les images, les boutons, les
sons etc.
Tag de contrôle : ils sont utilisés pour créer des instances de formes, images, etc., puis
les afficher pour créer des animations dans le lecteur Flash.
(2)Ordre et streaming
Les tags de définitions doivent se trouver avant les tags de contrôle. L’ordre des tags de
contrôle définit l’ordre des animations. Ce système d’ordre, permet le streaming. Un tag ne
dépend que de celui qui est lu avant.
Etude des API java pour la génération de code Flash - Page 14/59
Probatoire CNAM 2007 – Nicolas Botet
(3)Identification et dictionnaire
Afin de supporter le streaming et le suivi entre deux tags, SWF utilise le principe du
dictionnaire d’identification que l’on rencontre plus loin dans le fichier. Chaque identification
dans le fichier doit avoir un nom unique.
Une identification est entrée dans le dictionnaire quand un tag de définition est rencontré dans
le fichier.
Une identification est cherchée dans le dictionnaire sur la base du numéro d’identification.
(4)Liste d’affichage
D’un point de vue théorique, un fichier « SWF » peut être divisé en deux parties :


La partie définition qui ajoute les identifications au dictionnaire
La partie contrôle qui exécute les opérations dans la « display list » en utilisant les
définitions définies dans le dictionnaire.
Depuis la version 3, la liste d’affichage est constituée d’une arborescence d’objets où un
élément peut avoir des éléments enfants. Les objets sont référencés par un numéro d’ordre. A
chaque niveau un seul objet peut exister.
Il existe trois opérations :



Placer un objet : place un caractère à un numéro d’ordre donné en utilisant une
transformation spécifiée.
Déplacer un objet : modifie un objet à un numéro d’ordre donné. Pendant la
transformation, il change le caractère.
Supprimer un objet : supprime un objet à un numéro d’ordre donné depuis l’affichage.
(5)Coordonnées
SWF utilise des entiers et des nombres de points fixes pour l’ensemble des coordonnées et des
matrices de transformations. Les coordonnées sont définies par des nombres entiers. Les
coordonnées en Flash sont déterminées en twips 1.
1
TWIP : Contraction pour twentieth of a point. Permet de mesurer la longueur. C'est une unité employée en
PAO. 1 twip est égal à 1/20ème de point, 1/1440ème de pouce.
Etude des API java pour la génération de code Flash - Page 15/59
Probatoire CNAM 2007 – Nicolas Botet
(6)Traitement d’un fichier SWF
Le modele de traitement d’un flux est que tous les tags sont traités en un flux jusqu’à ce qu’un
« ShowFrame tag » soit rencontré. A ce moment là, la « display list » est copiée à l’écran et le
lecteur se met en veille jusqu’au traitement de la prochaine Frame.
Un fichier SWF est divisé en plusieurs frames par des « show frame tag ». Le Frame 1 est
défini en effectuant toutes les opérations de contrôle avant le premier « show frame tag ». Le
Frame 2 est défini en effectuant toutes les opérations de contrôle avant le second « show
frame tag ».
(7)La stratégie de compression des fichiers
Etant donné que les fichiers SWF sont fréquemment utilisés sans tenir compte de la qualité du
réseau, il est important qu'ils soient aussi compacts que possible.
Voici plusieurs techniques :






Reuse : La structure dictionnaire de caractère permet très facilement de réutiliser des
éléments dans un fichier SWF. Une forme, un bouton, un son, une police, peuvent être
stockés dans un fichier une fois et réutilisés plusieurs fois.
Compression : Le contenu des « tags » est compressé. SWF supporte plusieurs
techniques de compression. Les bitmaps peuvent être compressés en JPEG. Le son est
comprimé en utilisant plusieurs niveaux de compression d'ADPCM1.
Bit Packing : quand c’est possible, des nombres sont emballés dans le plus petit
nombre de bits possible pour une valeur particulière. Utilisé pour les coordonnées.
Default values : Quelques éléments comme les matrices et la transformation de la
couleur ont des champs communs qui sont employés plus souvent que d'autres. Par
exemple, pour une matrice, le champ le plus commun est le champ de translation. Les
champs de graduation et de rotation sont moins communs. Par conséquent si le champ
de graduation n'est pas présent, on suppose que l’échelle est de 100%. Si le champ de
rotation n'est pas présent, on suppose qu'il n'y a aucune rotation. Cette utilisation des
valeurs par défaut aide à réduire au minimum la taille des fichiers.
Change Encoding : Dans un fichier SWF, les changements entre deux états sont
stockés. Les fichiers SWF stockent juste les changements entre les états. Ceci est
représenté dans la structure de données des formes et dans le modèle de
place/move/remove employé par la play list.
Shape Data Structure : Shape Data Structure utilise une structure de données unique
pour réduire au minimum la taille des formes et pour rendre un anti-aliased des formes
très efficace.
1
ADPCM : Sigle anglais correspondant à Modulation par impulsion et codage différentiel adaptatif. Cette
méthode de codage des fichiers sonores monopolise moins d'espace de stockage que le format PCM classique
utilisé par les fichiers WAV, AIFF et ceux des CD audio.
Etude des API java pour la génération de code Flash - Page 16/59
Probatoire CNAM 2007 – Nicolas Botet
Bien que les différents composants d’un fichier SWF soient compressés, il n'y a aucune
compression globale appliquée au fichier. Ceci permet au lecteur de traiter la structure du
fichier directement hors de la RAM sans le décompresser. Divers éléments, tels que les
formes et les sons peuvent être décompressés lorsqu’ils sont nécessaires.
(8)Manipulation d’un fichier flash.
Comme nous l’avons vu précédemment, un fichier flash peut fonctionner de plusieurs façons,
en le faisant interagir avec des éléments extérieurs, ou en le retravaillant à travers un fichier
FLA. La suite de cette étude, va permettre de travailler directement sur le fichier SWF sans
avoir besoin de passer par des phases de compilation ou par le biais de fichier FLA. Nous
verrons également que nous pourrons modifier des fichiers Action Script.
4.Le langage Action Script
a)Présentation
ActionScript est un langage de programmation orienté objet (POO), dérivé de la même norme
W3C que le JavaScript, l’ECMAScript quant à sa syntaxe et ressemblant à Java par sa
structure. Il est basé sur les prototypes, c’est-à-dire des objets qui servent à créer de nouveaux
objets par clonage, et il supporte tous les éléments d’un langage P.O.O. : classes, interfaces,
héritage, composition etc.
Contrairement à JavaScript, dont le modèle de document objet (DOM) est axé sur les fenêtres,
les documents ou les formulaires, le DOM d’AS3 se fonde sur les séquences de film
comportant des animations, du contenu sonore, du texte. De plus, tous les éléments
fonctionnent de manière asynchrone : les téléchargements se font sans s’attendre les uns les
autres.
Depuis sa première version, ActionScript implémente XML, permettant à la plateforme Flash
de recevoir et d’envoyer des informations structurées grâce au langage XML.
Les nouveautés de la version ActionScript 3 incluent le typage strict, la déclaration explicite
de classes, l’héritage et l’interfaçage.
b)Fonctionnement
Le code ActionScript est exécuté par la machine virtuelle ActionScript, un composant de
Flash Player. Le code est généralement compilé en pseudo-code binaire par un compilateur
(ex : Adobe Flash CS3 Professional, Flex Builder, Adobe Flex SDK, les services de données
Flex Data). Le pseudo-code binaire est incorporé aux fichiers SWF, qui est exécuté par Flash
Player dans l'environnement d'exécution.
Une autre façon d’utiliser le langage actionScript consiste à créer un fichier « AS » puis de le
compiler en fichier SWF à l’aide d’un outil libre comme MTASC 1.
1
MTASC : Motion-Twin ActionScript 2 Compiler
Etude des API java pour la génération de code Flash - Page 17/59
Probatoire CNAM 2007 – Nicolas Botet
Les fonctions principales d'ActionScript 3.0 sont les suivantes :






Une nouvelle machine virtuelle ActionScript, nommée AVM2, qui exploite un
nouveau jeu d'instructions de pseudo-code binaire et améliore grandement les
performances.
Une base de code de compilation plus moderne, davantage en accord avec la norme
ECMAScript (ECMA 262) et qui accomplit de meilleures optimisations que les
versions antérieures du compilateur.
Une interface de programmation (API) étendue et améliorée, avec contrôle de bas
niveau des objets et un véritable modèle orienté objet.
Un langage de base reposant sur la future version 4 de la spécification ECMAScript
(ECMA-262).
Une API XML reposant sur la spécification ECMAScript pour XML (E4X) (ECMA357 niveau 2). E4X est une extension de langage d'ECMAScript qui ajoute XML
comme type de données natif.
Un modèle d'événements fondés sur la spécification d'événements du modèle d'objet
de document (DOM, Document Object Model) niveau 3.
Etude des API java pour la génération de code Flash - Page 18/59
Probatoire CNAM 2007 – Nicolas Botet
5.Fonctionnement du lecteur Flash
Une application flash est programmée pour le lecteur Flash. Une animation Flash contient la
définition des objets qui seront créés, affichés et mis à jour tout au long de l’exécution du
fichier SWF.
Illustration 10 : Schéma représentant le modèle de programmation du lecteur Flash
Explication du schéma
Dictionary : Le dictionnaire est la table contenant la définition des objets (boutons, images,
sons etc.) qui seront affichés dans l’animation.
Chaque définition contient un identifiant unique qui lui permet d’être référencée quand une
instance est créée (forme particulière, bouton etc.) lors de l’affichage à l’écran.
Un nouvel élément est ajouté au dictionnaire quand la définition d’un objet est décodée depuis
une animation Flash.
Etude des API java pour la génération de code Flash - Page 19/59
Probatoire CNAM 2007 – Nicolas Botet
Display List : la liste d’affichage, composée de plusieurs couches, contrôle l’ordre dans le
quel seront affichés les objets dans l’écran « screen ». Le numéro de la couche permet de
contrôler, dans la pile, l’ordre d’affichage de l’objet pendant l’exécution de l’animation. Un
seul objet peut être placé à une couche donnée à un certain temps, comme l’identifiant unique
utilisé pour créer un objet depuis sa définition dans le dictionnaire, le numéro de la couche
peut être utilisé pour se référer à un objet. Un objet placé dans la liste d’affichage est toujours
visible jusqu’à ce qu’il soit explicitement supprimé. Une fois l’objet détruit, une autre
instance peut être créée à partir de sa définition si l’objet doit encore être affiché.
Movie List : la liste d’animation est utilisée pour gérer l’animation et les animations
attachées. La liste d’animation contient un nombre de niveau virtuel, équivalent aux couches
dans la liste d’affichage, qui est utilisée pour conserver un suivi de chaque animation chargée.
L’animation principale est chargée au niveau zéro. Les animations attachées qui seront
affichées dans l’animation principale seront chargées au niveau 1, puis 2 etc. Charger un
« sprite 1 » à un niveau, remplace le précédent. Cela permet à plusieurs séquences d’animation
d’être assemblée dans une seule animation.
Screen : l’écran, est un affichage de bit-mapped où le lecteur Flash rend les objets graphiques
pour créer une animation. Le « showFrame Tag » est décodé, les objets sont ajoutés à la liste
d’affichage puis envoyés au « screen ». Tous les graphiques et fontes sont lissés par le
principe d’anti-aliasing. Les coordonnées en Flash sont déterminées en twips 2.
En plus de la vidéo, le lecteur Flash supporte trois autres services qui permettent à l’utilisateur
d’interagir avec l’animation.



Le clavier afin de saisir des données et interagir avec l’application
Une souris pour permettre de cliquer sur les boutons et générer des événements
La lecture du son (qualité CD)
Instruction Buffer : endroit ou sont chargées les actions exécutées par le lecteur Flash
Instruction Pointer : Il contient les adresses des instructions suivantes devant être exécutées.
Chaque action contient 16-bit qui sont réservés à l’adresse dans « l’instruction pointeur » pour
obtenir l’adresse de l’instruction suivante dans « l’instruction buffer ».
Stack : La pile sert à l’exécution des calculs. Quand les actions sont exécutées les arguments
requis sont dépilés de la pile et les résultats sont repoussés sur la pile. Les valeurs poussées
sur la pile sont principalement des entiers ou des chaines de caractère.
String Table : quand les valeurs sont réutilisées lors de calcul
Registers : quand les valeurs sont réutilisées lors de calcul, elles sont stockées
temporairement.
Memory : La mémoire stocke des variables utilisées seulement par le lecteur Flash. Le nom
de la variable est déposé sur la pile (« stack »). La valeur de la variable est récupérée dans la
mémoire et déposée sur la pile. Pour ajouter une variable, sa valeur suivie de son nom sont
déposées sur la pile et une action est exécutée pour mettre à jour la variable en mémoire.
1
Une animation ou une image attachée à l’animation principale
TWIP : Contraction pour twentieth of a point. Permet de mesurer la longueur. C'est une unité employée en
PAO. 1 twip est égal à 1/20ème de point, 1/1440ème de pouce.
2
Etude des API java pour la génération de code Flash - Page 20/59
Probatoire CNAM 2007 – Nicolas Botet
III.La génération de code par les API JAVA
A.Introduction
Il existe plusieurs API java développées par des développeurs intéressés par la technologie
Flash. Nous verrons quelques unes des principales API existantes, chacune a ses spécificités,
certaines ne sont plus maintenues et deviennent obsolètes.
L’intérêt de générer du code Flash par le biais de Java réside dans le fait de pouvoir utiliser la
technologie java notamment côté serveur et d’utiliser un lecteur extrêmement portable, léger
et répandu dans le monde dans le but de proposer des applications dynamiques (notamment
RIA1) à l’interface graphique très attrayante. En effet, Flash offre une plus grande portabilité,
tout particulièrement pour la gestion graphique. Il est également plus simple d’intégrer des
animations (plus difficile à gérer en java) à des applications événementielles.
Pour les applications web, les fichiers SWF permettent de conserver tous les avantages de
Flash par rapport à Java : légèreté du téléchargement, moindre consommation mémoire,
possibilités graphiques étendues, performances graphiques supérieures, meilleure productivité
dans la réalisation d’effets graphiques.
L’intérêt d’utiliser java permet à des développeurs java de générer du code SWF sans utiliser
les applications propriétaires Adobe. De plus, en connaissant la spécification du format de
fichier SWF, il leur est permis, sans connaissance de langage Flash de développer des fichiers
Flash.
Le domaine d’application est vaste, car l’utilisation de ses API peut servir à :



Des applications clients serveurs : créer une application dynamique en utilisant le
Player Fash tout en générant le code à partir d’une plate forme JAVA.
Des applications autonomes : un diaporama transformé en fichier SWF (Open Office)
Développer des outils permettant de travailler sur des fichiers Flash
Liste des API étudiées :

Metaas 0.7 API

JavaSWF2

Flagstone Software TRANSORM

Flagstone Software TRANSLATE AS1

JSwiff
1
R.I.A. : Rich Internet Application, sont des applications qui partageant les caractéristiques des applications
autonomes tout en fonctionnant en mode client-serveur.
Etude des API java pour la génération de code Flash - Page 21/59
Probatoire CNAM 2007 – Nicolas Botet
B.Les API
1.Metaas 0.7 API
a)Présentation
L’API Metaas a pour principale fonction de générer du code Action Script 3 mais elle permet
également de charger des fichiers Acion Script et d’effectuer quelques modifications simples.
Cette API ne permet pas de générer des fichiers Flash ou des AS bytecode.
Son développement a été inspiré de JaxMe1 pour la génération du code JAVA.
Metaas est basé à l’origine sur la grammaire ANTLR 2 de Action Script 3 provenant du projet
ASDT3. Cette API est fournie sous licence LGPL 4 ce qui lui permet d’être utilisée librement
tout en respectant les clauses de la licence.
Nom
Version
Licence
Dernières modifications
Compatibilité Flash
Documentation fournie
Site Internet
Metaas
0.7
LGPL
17/03/2007
Action Script 3
**
http://www.badgers-in-foil.co.uk/projects/metaas/
Illustration 11 : Fiche récapitulative de l’API Metaas 0.7
b)Utilisation
L’utilisation de cette API va permettre aux développeurs JAVA de générer du code
ActionScript3. En effet, un fichier « .AS » sera généré. Ce fichier sera alors utilisé par un
fichier SWF lors de son exécution ou bien il sera compilé à l’aide d’un compilateur AS.
Illustration 12 : Exemple d’utilisation de l’API Metaas 0.7
1
JaxMe : un compilateur de liaisons Java - XML
ANTLR : ANother Tool for Language Recognition. C’est un générateur d'analyseur syntaxique et lexical
permettant de générer du code Java ou C++. Il peut générer des arbres syntaxiques abstraits (AST) et des classes
pour le parcourir.
3
ASDT : Action Script Development Tools, est un ensemble de plugins pour la plateforme Eclipse qui permet
d'écrire du code ActionScript2 dans un environnement intégré.
4
LGPL : Lesser General Public License (V. Annexe)
2
Etude des API java pour la génération de code Flash - Page 22/59
Probatoire CNAM 2007 – Nicolas Botet
c)Architecture
Cette A.P.I. fournit à JAVA deux packages.


Package uk.co.badgersinfoil.metaas : génération et manipulation du code Action
Script
Package uk.co.badgersinfoil.metaas.dom : Interface permettant de définir
« Document Object Model » pour le code source d’un fichier action script 3.
le
d)Quelques notions complémentaires sur l’utilisation de
cette A.P.I.
(1)Syntax Errors
Metaas contrôle les règles de syntaxe d’action Script :
meth.addStmt("trace(i)");
uk.co.badgersinfoil.metaas.SyntaxException:
RPAREN) in "trace(i)"
Unexpected
token
RBRACK
(expecting
(2)Inspection du code
Exemple à partir du code java ci-dessous pour lire le contenu du fichier « Test.as ».
FileInputStream in = new FileInputStream("Test.as");
InputStreamReader reader = new InputStreamReader(in);
ActionScriptFactory fact = new ActionScriptFactory();
ActionScriptParser parser = fact.newParser();
ASCompilationUnit unit = parser.parse(reader);
Il est alors possible d’utiliser les méthodes de l’Interface « ASCompilationUnit » du package
« uk.co.badgersinfoil.metaas.dom » pour explorer les types, les champs et les méthodes
définies dans le code source du fichier Action Script.
Par exemple, pour lister toutes les méthodes définies dans « Test.as », il suffit d’ajouter les
lignes suivantes à l'exemple ci-dessus :
ASPackage pkg = unit.getPackage();
ASType type = pkg.getType();
List methods = type.getMethods();
for (Iterator i=methods.iterator(); i.hasNext(); ) {
ASMethod meth = (ASMethod)i.next();
System.out.println(meth.getName());
}
Etude des API java pour la génération de code Flash - Page 23/59
Probatoire CNAM 2007 – Nicolas Botet
(3)Ajouter des commentaires
Metaas permet d’établir des commentaires JavaDoc-style des éléments de l’api avec
l'interface « Documentable » du package « uk.co.badgersinfoil.metaas.dom ».
Les éléments de l’interface « Documentable » fournissent une description simple du
commentaire, par l'intermédiaire de l’objet « DocComment ».
Exemple :
Nous allons ajouter un commentaire dans le code de l’exemple ci-dessus grâce à la fonction
« setDescription » :
ASCompilationUnit unit = proj.newClass("Test");
ASClassType clazz = (ASClassType)unit.getType();
clazz.setDescription("Test Commentaire.");
Le résultat en action script donne ceci :
package {
/**
* Test Commentaire.
*/
public class Test {
}
}
Plusieurs éléments fournissent leurs propres méthodes d’accès. Par exemple, « ASArg »
permet la manipulation des sections « @param » dans la documentation de la méthode,
ASMethod meth = clazz.newMethod("test", Visibility.PUBLIC, "void");
ASArg t = meth.addParam("t", "String");
t.setDescription("must not be null");
Le résultat en action script donne ceci :
/**
* @param t must not be null
*/
public functinon test(t:String):void {
}
Etude des API java pour la génération de code Flash - Page 24/59
Probatoire CNAM 2007 – Nicolas Botet
e)Exemple
Sujet : Génération d’un fichier « .as » dans un répertoire :
ActionScriptFactory fact = new ActionScriptFactory();
ActionScriptProject proj = fact.newEmptyASProject(".");
ASCompilationUnit unit = proj.newClass("Test");
ASClassType clazz = (ASClassType)unit.getType();
ASMethod meth = clazz.newMethod("test", Visibility.PUBLIC, "void");
meth.addStmt("trace('Hello world')");
proj.writeAll();
Explication de l’exemple
L’expression « proj.newClass("Test") » génère le code action script suivant :
package {
public class Test {
}
}
L’expression « clazz.newMethod("test", Visibility.PUBLIC, "void") » ajoute une méthode
dans la classe créée précédemment :
public function test():void {
}
L’expression « meth.addStatement("trace('Hello world')") » ajoute une ligne à la méthode
créée précédemment (un « ; » a été ajouté) :
trace('Hello world');
Pour finir, l’expression « proj.writeAll() » crée un fichier appelé « Test.as » dans le répertoire
courant comprenant le code si dessous :
package {
public class Test {
public function test():void {
trace('Hello world');
}
}
}
Cet exemple montre comment créer un fichier Action Script. Pour terminer l’exemple et
afficher ce résultat, il suffit de créer un fichier SWF devant exécuter le code du fichier
« Test.as ». Les mots « Hello word » seront alors affichés dans le lecteur Flash.
Etude des API java pour la génération de code Flash - Page 25/59
Probatoire CNAM 2007 – Nicolas Botet
Illustration 13 : Illustration de l’exemple utilisant l’API Metaas 0.7
f)Licence d’utilisation
Cette API est distribuée sous licence GNU Lesser General Public License. Cela signifie que le
code pourra être réutilisé sous certaines conditions. Cependant, l’application développée, si le
code de l’API n’est pas modifié, pourra ne pas être couvert par la licence LGPL.
g)Conclusion
Cette API fournit de nombreuses classes et méthodes pour manipuler et générer du code
action script 3. Elle est toujours en évolution et les dernières modifications sont récentes,
puisque la version 0.7 date du 17 mars 2007.
Les tests effectués sont concluants, si ce n’est, des difficultés lors de la manipulation des
fichiers Action Script quant à des problèmes de versions. Une API puissante pour générer et
modifier simplement des fichiers Action Script. Moins efficace pour manipuler des fichiers
« AS » générés par d’autres applications. Les fichiers manipulés devront être exécutés à l’aide
d’un fichier SWF. Cette API ne fournit pas de compilateur.
Etude des API java pour la génération de code Flash - Page 26/59
Probatoire CNAM 2007 – Nicolas Botet
2.JavaSWF2
a)Présentation
L’API « JavaSWF2 » fournit un ensemble de classes et de méthodes permettant d’analyser,
manipuler et générer des fichiers « SWF ». Cette API permet également de travailler sur le
code AcrionScript mais seulement sous sa forme compilée
La version actuelle, n’est pas tout à fait un produit fini car tous les tests n’ont pas été
effectués. Cependant aucun problème majeur n’a encore été décelé. Il semblerait que le projet
ne soit plus suivi de par la date de la dernière version datant du 29 juillet 2003. Cette API est
fournie sous licence BSD 1 ce qui lui permet d’être utilisée librement tout en respectant les
clauses de la licence.
Nom
Version
Licence
Dernières modifications
Domaine d’intervention Flash
Documentation fournie
Site Internet
JavaSWF2
020729
BSD
29/07/2003
Flash 4 et 5, action script
*
http://www.anotherbigidea.com/javaswf/
Illustration 14 : Fiche récapitulative de l’API JavaSWF2
b)Utilisation
L’utilisation de cette API va permettre aux développeurs JAVA de générer et d’analyser des
fichiers SWF.
Illustration 15 : Exemple d’utilisation de l’API JavaSWF2
1
BSD : Berkeley Software Distribution (V. Annexe)
Etude des API java pour la génération de code Flash - Page 27/59
Probatoire CNAM 2007 – Nicolas Botet
c)Architecture
Le
code
principal
se
situe
autour
des
interfaces
du
package
« com.anotherbigidea.flash.interfaces ».
Ces interfaces sont employées pour récupérer diverses informations sur le contenu d'un fichier
SWF. Les classes permettant d’analyser et d’écrire des fichiers SWF implémentent ces
interfaces.
L’interface clé « com.anotherbigidea.flash.interfaces » est utilisée pour manipuler des
informations sur le contenu des fichiers flash.
2 niveaux :

Le format du fichier : fournit tous les détails sur le format du fichier (analyse et
écriture). Très efficace, quand le format du fichier est connu et que l’on souhaite
implémenter rapidement une analyse ou une génération de code.

Le modèle objet : est implémenté par les classes du
package
« com.anotherbigidea.flash.movie » qui permet d’accéder et de générer du contenu
Flash sans connaître les détails du format du fichier.
Les packages :







com.anotherbigidea.flash
o dé protection de films flash
o constantes utilisées pour action script ou autre tag et flag
com.anotherbigidea.flash.interfaces
o interface pour passer de l’action code, des tags, header du fichier SWF
com.anotherbigidea.flash.readers
o lit les fichiers SWF
o analyse le contenu des tags
o convertit les fichiers SWF en XML
com.anotherbigidea.flash.writers
o écriture dans un stream ou un fichier
o représentation textuelle d’un film
com.anotherbigidea.flash.structs
com.anotherbigidea.flash.movie
com.anotherbigidea.flash.sound
Etude des API java pour la génération de code Flash - Page 28/59
Probatoire CNAM 2007 – Nicolas Botet
d)Quelques notions complémentaires sur l’utilisation de
cette A.P.I.
Manipulation d’XML et SWF
Pour compiler les classes mentionnées ci-dessous il faudra utiliser le package « org.xml.sax.»
1
dans le classpath. Ce sont les interfaces standards de SAX(2)
qui sont incluses dans
JavaSWF2 et devraient également inclure tous les packages récents d'analyseur de XML.
« Apache Xerces » et « Crimson parsers » sont recommandés, même si l’on peut utiliser
n'importe quel analyseur SAX2 conforme. Pour ce faire, un DTD 2 est fourni.

Convertir un fichier SWF en XML
Il faut utiliser la classe « com.anotherbigidea.flash.readers.SWFSaxParser » qui utilise
l'interface standard « org.xml.sax.XMLReader » et la classe « SWFTagTypes ».
La méthode principale de « SWFSaxParser » est une commande en ligne permettant de lire un
fichier SWF et de l’écrire XML.
/**
* Lit un fichier SWF (args[0]) et génère un fichier XML (args[1])
*/
public static void main( String[] args ) throws Exception
{
OutputStream out = new FileOutputStream( args[1] );
XMLWriter writer = new XMLWriter( out );
SWFSaxParser parser = new SWFSaxParser( writer, writer );
parser.parse( args[0] );
out.close();
}
1
SAX : « Simple API for XML », API java pour la manipulation XML.
DTD : « Document Type Definition », document qui fournit une grammaire afin de vérifier la conformité du
document XML.
2
Etude des API java pour la génération de code Flash - Page 29/59
Probatoire CNAM 2007 – Nicolas Botet

Convertir un fichier XML en SWF
Il faut utiliser la classe « com.anotherbigidea.flash.writers.SWFSaxWriter ». Il n’y a pas
d’utilitaire fourni pour passer d’un fichier XML à un fichier SWF pour ne pas qu’il y ait de
dépendance avec un analyseur particulier de XML. Cependant, voici un exemple qui utilise
l'analyseur de Xerces pour produire un fichier SWF.
import java.io.*;
import java.awt.*;
import com.anotherbigidea.flash.*;
import com.anotherbigidea.flash.movie.*;
import com.anotherbigidea.flash.interfaces.*;
import com.anotherbigidea.flash.writers.*;
import com.anotherbigidea.util.xml.Xerces;
/**
* Exemple pour convertir un fichier XML en SWF.
* Arg[0] = input xml filename
* Arg[1] = output swf filename
*/
public class Xml2Swf
{
public static void main( String[] args ) throws Exception
{
FileInputStream in = new FileInputStream( args[0] );
SWFWriter swftags = new SWFWriter( args[1] );
TagWriter tagwriter = new TagWriter( swftags );
SWFSaxWriter saxout = new SWFSaxWriter( tagwriter );
Xerces.parse( saxout, in );
}
}
Etude des API java pour la génération de code Flash - Page 30/59
Probatoire CNAM 2007 – Nicolas Botet
e)Exemple
Cet exemple proposé par l’API JavaSWF2, permet d’illustrer la création d’un fichier SWF
affichant une forme géométrique.
Dans cet exemple, nous utiliserons principalement les objets :
 Movie : contient l’animation
 Frame : gestion du Frame
 MovieClip : gestion de Movie Clip
import java.io.*;
import com.anotherbigidea.flash.interfaces.*;
import com.anotherbigidea.flash.writers.*;
import com.anotherbigidea.flash.structs.*;
import com.anotherbigidea.flash.movie.*;
/**
* Exemple utilisant le package Movie pour créer une simple animation Flash constitué de 4 instances
* de Movie Clip contenant carré rouge tournant.
*/
public class RedSquare
{
/**
* le premier argument est le nom du fichier de sortie
*/
public static void main( String[] args ) throws IOException
{
Movie movie = new Movie();
//-- Créer un carré rouge avec un contour noir
Shape shape = new Shape();
shape.defineFillStyle( new Color(255,0,0) );
shape.defineLineStyle( 2.0, new Color(0,0,0) );
shape.setRightFillStyle( 1 );
shape.setLineStyle( 1 );
shape.move( -50, -50 );
shape.line( 50, -50 );
shape.line( 50, 50 );
shape.line( -50, 50 );
shape.line( -50, -50 );
//--Création du Movie Clip (Sprite)
MovieClip clip = new MovieClip();
Frame f1 = clip.appendFrame();
//--Place le carré rouge au entre du Movie Clip
Instance inst = f1.placeSymbol( shape, 0, 0 );
//--Rotation du carré (utilisation en degrés)
for( int angle = 10; angle < 90; angle += 10 )
{
//--Conversion des degrés en angle
double radians = angle * Math.PI / 180.0;
Frame f = clip.appendFrame();
//--Création d’un matrice de rotation
Transform matrix = new Transform( radians, 0.0, 0.0 );
//--Changer le carré en utilisant la matrice de transformation
f.alter( inst, matrix, null );
}
//-- Ajouter une simple frame à l’animation et lui donner l'action de s’arrêter pour
// l’empêcher de faire une boucle (les boucles de Movie Clip sont indépendantes)
Frame frame = movie.appendFrame();
frame.stop();
Etude des API java pour la génération de code Flash - Page 31/59
Probatoire CNAM 2007 – Nicolas Botet
//--Positionne 4 instances de Movie Clip
frame.placeSymbol( clip, 100, 100 );
frame.placeSymbol( clip, 300, 100 );
frame.placeSymbol( clip, 100, 300 );
frame.placeSymbol( clip, 300, 300 );
//--Sauve l’animation dans le fichier de sortie
movie.write( args[0] );
}
}
Illustration 16 : Illustration de l’exemple utilisant l’API JavaSWF2
f)Licence d’utilisation
Le code source de l’API pourra être réutilisé sous la licence Berkeley Software Distribution
License. Cela signifie que le code peut être librement réutilisé en respectant les indications
spécifiées ci-dessous.
The JavaSWF2-BSD License
Copyright (c) 2001, David N. Main, All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted
provided that the following conditions are met:
1.
2.
3.
Redistributions of source code must retain the above copyright notice, this list of conditions and the
following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
The name of the author may not be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR « AS IS » AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Etude des API java pour la génération de code Flash - Page 32/59
Probatoire CNAM 2007 – Nicolas Botet
g)Conclusion
Cette API fournit quelques classes et méthodes pour manipuler et générer des fichiers Flash 4
et 5 ainsi que de l’action Script. Elle n’est plus suivie, la dernière modification date du mois
de juillet 2003. La documentation propose quelques exemples, mais peu d’explications.
L’accent est mis sur la manipulation des fichiers XML et SWF.
Etude des API java pour la génération de code Flash - Page 33/59
Probatoire CNAM 2007 – Nicolas Botet
3.Transfom SWF
a)Présentation
Cette API permet de lire, d’écrire et de manipuler des fichiers SWF. En plus des classes de
base qui composent le noyau, l’API fournit une interface de plus haut niveau afin de faciliter
1
la mise en œuvre d’application. Cette API est fournie sous licence BSD
ce qui lui permet
d’être utilisée librement tout en respectant les clauses de la licence.
De plus, Flagstone Software propose « Describe SWF »un outil permettant l’analyse des tags
d’un fichier SWF. Il permet, tout en offrant plusieurs vues (texte, binaire, hexadécimal et
description), de déterminer les tags utilisés ainsi que leur contenu.
Nom
Transfom SWF
Version
Licence
Dernières modifications
Domaine d’intervention Flash
2.1.5
BSD
03/01/2007
 Manipulation Flash7
 Analyse et génère Flash9
***
Describe SWF
http://www.flagstonesoftware.com/
Documentation fournie
Outil fourni par l’API
Site Internet
Illustration 17 : Fiche récapitulative de l’API Transform SWF
b)Utilisation
L’utilisation de cette API va permettre aux développeurs JAVA de générer et d’analyser des
fichiers SWF.
Illustration 18 : Exemple d’utilisation de l’API Transform SWF
1
BSD : Berkeley Software Distribution (V. Annexe)
Etude des API java pour la génération de code Flash - Page 34/59
Probatoire CNAM 2007 – Nicolas Botet
c)Architecture
Transform SWF, fournit une collection de classes pour chacun des tags et structures de
données qui constituent un fichier Flash. La classe «FSMovie » est la classe pivot qui permet
de décrire une animation Flash. Elle contient les instances des classes qui représentent chaque
type de tags.
Les packages :


com.flagstone.transform : ce package permet de lire et d’écrire des fichiers Flash.
com.flagstone.transform.util : ce package permet d’ajouter facilement des images, du
texte et du son à des films.
d)Exemple
Dans cet exemple, proposé par la documentation de l’API, nous verrons l’utilisation de la
classe « FSMovie » ainsi que l’utilisation de certaines de ses fonctions.
Cet extrait montre comment créer une animation Flash permettant l’affichage d’un rectangle.
Dans le code original, deux classes sont utilisées :
 La classe abstraite « Example.java » : contenant le code permettant de créer l’objet
« movie »
 La classe « MovieBasics.java » : contenant le code permettant la conception de
l’animation flash.
Déroulement du code :
1. L’objet movie est instancié :
movie = new FSMovie();
2. La procédure « createMovie() » permet de créé l’objet qui deviendra après
compilation un fichier SWF :
public void createMovie()
{
/*
* La taille de l'animation est spécifiée en pixels (contrôlé par les champs
* COORDINATES_ARE_PIXELS dans le package transform. Les limites du rectangle sont
* définies par 2 points : le coin en bas à gauche et le coin en haut à droite
*
* La limite du rectangle définit également les coordonnés pour les axes x et y
* Ici les coordonnées pour les axe des x et des y s'étendent de -200 à + 200. Le point
* (0,0) se situ au centre de l'écran.
*
* Si les coordonnées des coins étaient indiquées à (0.0) et (400, 400) la taille
* de l'écran serait toujours identique cependant le centre trouverait à (200.200)
*/
int xLower = -4000;
int yLower = -4000;
int xUpper = 4000;
int yUpper = 4000;
/*
Etude des API java pour la génération de code Flash - Page 35/59
Probatoire CNAM 2007 – Nicolas Botet
* Définit la fréquence de frame à laquelle l'animation serait jouée.
*/
float framesPerSecond = 1.0f;
movie.setFrameRate(framesPerSecond);
movie.setFrameSize(new FSBounds(xLower, yLower, xUpper, yUpper));
/*
* Définit la couleur du fond de l'écran à bleu.
* La couleur de fond est définit une seule fois et devrait être le premier objet
* à être ajouté à l'animation. Si aucune couleur n'est spécifiée, le lecteur définira un
* fond blanc.
*/
movie.add(new FSSetBackgroundColor(FSColorTable.lightblue()));
/*
* Définit une forme à afficher. Chaque objet doit posséder un identifiant unique
* qui est utilisé pour identifier l'objet quand il est ajouté, mise à jour ou supprimé
* de la display list.
* L'objet movie, garde la trace des identifiant pour garantir leurs unicités de chacun.
*/
int identifier = movie.newIdentifier();
int width = 4000;
int height = 4000;
FSBounds bounds = new FSBounds(-2000, -2000, 2000, 2000);
ArrayList lineStyles = new ArrayList();
ArrayList fillStyles = new ArrayList();
lineStyles.add(new FSSolidLine(20, FSColorTable.black()));
fillStyles.add(new FSSolidFill(FSColorTable.red()));
/*
* Création du contour de la forme.
*/
ArrayList shapeRecords = new ArrayList();
shapeRecords.add(new FSShapeStyle(1, 1, 0, -width/2, -height/2));
shapeRecords.add(new FSLine(width, 0));
shapeRecords.add(new FSLine(0, height));
shapeRecords.add(new FSLine(-width, 0));
shapeRecords.add(new FSLine(0, -height));
FSDefineShape rectangle = new FSDefineShape(identifier, bounds, fillStyles, lineStyles, new FSShape(shapeRecords));
/*
* Ajoute le rectangle à l'animation. Toutes les formes et les objets doivent être définis
* avant qu'ils puissent être placé dans la display list et affiché dans le lecteur Flash
*/
movie.add(rectangle);
/*
* Position de la forme dans la display list. Voir l'exemple pour l'ensemble
* des objets qui seront utilisés pour ajouter, modifier et effacer des objets
* de la display list.
*/
movie.add(new FSPlaceObject(identifier, 1, 0, 0));
/*
* Montre le contenu de la display list. Les frames sont délimité par
* la succession des objets FSShowFrame
*/
movie.add(new FSShowFrame());
}
}
3. Lancement de la procédure permettant la compilation et la génération du fichier Flash
writeFile("MovieBasics.swf");
/* writeFile est utilisé pour coder les objets et pour les écrire dans un fichier Flash.
* Pour créer une animation Flash chacune des structures de données
Etude des API java pour la génération de code Flash - Page 36/59
Probatoire CNAM 2007 – Nicolas Botet
* sont ajoutés à l'objet movie. Le fichier Flash codé est alors produit
* en appelant la méthode encodeToFile de l'objet FSMovie ().
*/
public void writeFile(String fileName)
{
try
{
movie.encodeToFile(resultDir + fileName);
}
catch (FileNotFoundException e)
{
System.err.println("Cannot open file: " + e.getMessage());
}
catch (IOException e)
{
System.err.println("Cannot write to file: " + e.getMessage());
}
}
Illustration 19 : Résultat de l’exemple utilisant l’API Transform SWF
Illustration 20 : Illustration de l’exemple utilisant l’API Transform SWF
Etude des API java pour la génération de code Flash - Page 37/59
Probatoire CNAM 2007 – Nicolas Botet
e)Licence d’utilisation
The Flagstone Software-BSD License
All the files in this library are covered under the terms of the Berkeley Software Distribution (BSD) License:
Copyright (c) 2001-2006 Flagstone Software Ltd. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
following conditions are met:
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of Flagstone Software Ltd. nor the names of its contributors may be used to endorse or
promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
f)Conclusion
Cette API, disponible sous licence BSD, offre de multiples possibilités pour la manipulation
et la création de fichier flash. Elle permet de travailler sur des fichiers Flash de dernière
génération (v.9).
L’API est complète, elle fournit de nombreux exemples tout en étant très bien documentée.
Elle s’intègre avec l’API Translate AS1 qui permet de manipuler du code Action Script 1.0.
Etude des API java pour la génération de code Flash - Page 38/59
Probatoire CNAM 2007 – Nicolas Botet
4.Translate AS1
a)Présentation
Cette API permet de compiler du code Action Script. Le code peut être ajouté aux objets de «
Transfom SWF » ou intégré à une librairie Flash tierce. Elle permet de créer des scripts
permettant la gestion d’événement déclenché par la souris ou le clavier. Le code généré est
compilé. Cette API est fournie sous licence GPL 1se qui lui permet d’être utilisée librement
tout en respectant les clauses de la licence, ou pour un usage commercial sous la licence
Flagstone Software License.
De plus, Flagstone Software propose « Describe SWF »un outil permettant l’analyse des tags
d’un fichier SWF. Il permet, tout en offrant plusieurs vues (texte, binaire, hexadécimal et
description), de déterminer les tags utilisés ainsi que leur contenu.
Nom
Translate AS1
Version
Licence
Dernières modifications
Domaine d’intervention Flash
Documentation fournie
Outil fourni par l’API
Site Internet
2.0.4
GPL et Flagstone Software License
03/01/2007
Action script 1.x
***
Describe SWF
http://www.flagstonesoftware.com/
Illustration 21 : Fiche récapitulative de l’API Translate AS1
b)Utilisation
L’utilisation de cette API va permettre aux développeurs JAVA de générer et d’analyser des
fichiers SWF à l’aide du code ActionScript. Cette API peut être utilisée avec l’API
« TransformSWF ».
Illustration 22 : Exemple d’utilisation de l’API Translate AS1
1
GPL : General Public License (V. Annexe)
Etude des API java pour la génération de code Flash - Page 39/59
Probatoire CNAM 2007 – Nicolas Botet
c)Architecture
Translate AS1 est une collection de classes utilisées pour mettre en application un compilateur
pour la version 1.0 d'ActionScript de Macromedia. Des scripts ActionScript sont analysés
pour produire des byte-codes et des actions qui seront exécutés par le player Flash.
Un package :

com.flagstone.translate : ce package permet d’implémenter un compilateur pour le
langage ActionScript 1.0 de Macromedia.
Le processus de compilation se décompose en deux étapes :

Le script est analysé et converti en arbre composé de « ASNode »

Le résultat est codé au format de fichier « SWF » qui spécifie le code et les actions à
exécuter par le lecteur Flash.
d)Exemple
String script = "a = b + c;"
int swfVersion = 5;
ASParser parser = new ASParser();
ASNode root = parser.parse(script);
byte[] data = root.encode(swfVersion);
La version du flash à laquelle on codera les « ASNodes » est passée au nœud racine. Le
format des structures de données correspondant au « movie clip events » et au « button
events » ayant changé entre la version 6 et 7, il est nécessaire de renseigner le numéro de
version pour coder les nœuds correctement.
Les événements lié à l’affichage d’une frame
Les scripts qui seront exécutés quand une frame est affichée peuvent être encodés puis
ajoutés à un objet FSDoAction.
String script = "gotoFrame(1)";
byte[] encodedActions = parser.parse(script).encode(swfVersion);
FSDoAction frameActions = new FSDoAction(encodedActions);
movie.add(frameActions);
Les événements liés à l’utilisation d’un bouton
Deux possibilités pour gérer les événements liés à l’utilisation de boutons :

Les actions qui sont exécutées en réponse à un ensemble d'un ou plusieurs
événements, sont ajoutées à un objet de FSButtonEvent
Etude des API java pour la génération de code Flash - Page 40/59
Probatoire CNAM 2007 – Nicolas Botet
String script = "gotoFrame(1)";
int event = FSButtonEvent.Release;
byte[] encodedActions = parser.parse(script).encode(swfVersion);
FSButtonEvent eventActions = new FSButtonEvent(event, encodedActions);
...
button.add(eventActions);
...
movie.add(button);

Le bloc « on () » est fourni pour indiquer l’utilisation de plusieurs événements. Une
fois utilisés dans un script les nœuds sont codés en un tableau d’objet d’événement et
sont ajoutés à un objet FSDefineButton2.
// This script advances the movie by 10 frames each time a button is clicked.
String script = "
on (press)
{
frameNumber = currentFrame + 10;
}
on (release)
{
currentFrame = frameNumber
gotoFrame(frameNumber);
}
";
byte[] encodedActions = parser.parse(script).encode(swfVersion);
...
button.add(encodedActions);
...
movie.add(button);
Utilisation de l’objet « ASNode »
Produire des objets « ASNodes » comme étape intermédiaire a deux avantages :


Des sections du code fréquemment utilisées peuvent être analysées une fois et être
alors codées dans les différents objets améliorant considérablement l'exécution d’une
animation.
Pour les scripts simples, les arbres peuvent être construits « manuellement ».
La classe propose une gamme complète de type de nœud permettant de gérer des structures
complexes telles que des structures itératives, conditionnelles et les boucles.
Exemple utilisant « Example.java »
Dans cet exemple, proposé par la documentation de l’API, nous verrons l’utilisation de
certaines classes que compose cette API. L’API « transformSWF » sera également utilisée.
Cet exemple montre comment utiliser cette API pour compiler du code ActionScript et
l’ajouter à une animation.
Dans le code original, deux classes sont utilisées :
 La classe abstraite « Example.java » : contenant le code permettant de créer l’objet
« movie »
 La classe « MovieClip.java » : contenant le code permettant la conception de
l’animation flash.
Etude des API java pour la génération de code Flash - Page 41/59
Probatoire CNAM 2007 – Nicolas Botet
/*
* MovieClip.java
* Examples
*
* Created by Stuart MacKay on Sun Jun 13 2004.
* Copyright (c) 2004 Flagstone Software Ltd. All rights reserved.
*
* This code is distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND Flagstone HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING
* WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
*/
package com.flagstone.translate.examples;
import com.flagstone.transform.*;
import com.flagstone.translate.*;
import com.flagstone.transform.examples.*;
import java.io.*;
import java.util.*;
/* Cette exemple présente comment utiliser Translate pour compiler en action script
* et pour contrôler une animation
*
* Pour exécuter cet exemple il faut taper la ligne de commande suivante :
*
* java com.flagstone.translate.examples.MovieClip --file script [--resultDir path]
*
* où
*
* script est le fichier contenant le code ActionScript qui sera exécuté pour
* contrôler l'animation
*
* path est le répertoire où le fichier Flash sera généré
*
*
*/
public class MovieClip extends Example
{
public static void main(String[] args)
{
new MovieClip(args);
}
public MovieClip(String[] args)
{
super(args);
int screenWidth = 8000;
int screenHeight = 8000;
int swfVersion = 5;
String filename = getOption("file", "");
ASParser parser = new ASParser();
try
{
/*
* Le movie clip est le plus simple possible, l’affichage d’un simple rectangle
* pour une seule Frame
*/
FSDefineShape rectangle = rectangle(movie.newIdentifier(), 2000, 2000, FSColorTable.red());
FSDefineMovieClip clip = new FSDefineMovieClip(movie.newIdentifier());
clip.add(new FSPlaceObject2(rectangle.getIdentifier(), 1, 0, 0));
clip.add(new FSShowFrame());
String script = contentsOfFile(filename);
byte[] events = parser.parse(script).encode(swfVersion);
FSPlaceObject2 location = new FSPlaceObject2(clip.getIdentifier(), 1, events, "clip",
screenWidth/2, screenHeight/2);
Etude des API java pour la génération de code Flash - Page 42/59
Probatoire CNAM 2007 – Nicolas Botet
/*
* Met tous les objets dans l’objet movie.
*/
movie.setFrameRate(12.0f);
movie.setFrameSize(new FSBounds(0, 0, screenWidth, screenHeight));
movie.add(new FSSetBackgroundColor(FSColorTable.lightblue()));
movie.add(rectangle);
movie.add(clip);
movie.add(location);
movie.add(new FSShowFrame());
writeFile("MovieClip.swf");
}
catch (FileNotFoundException e)
{
System.err.println("Could not open file: " + filename);
}
catch (IOException e)
{
System.err.println("Could not read file: " + filename);
}
catch (ParseException e)
{
/*
* si le parser détecte une erreur dans le script une « parseExeption » sera déclenchée
* le parseur peut être utilisé pour rapporter une erreur et où elle s’est produite dans le manuscrit.
*/
System.err.println(parser.getError());
System.err.println("Line: " + parser.getLineNumber());
System.err.println(parser.getLine());
}
}
/* Définition d’un simple rectangle rempli avec un contour plein.
*
* @param Identifier l’unique identifiant utilisé pour référencer la Shape définition.
* @param width la largeur du rectangle en twips.
* @param height la hauteur du rectangle en twips.
* @param color la couleur utilisée pour remplir le contenu du rectangle.
*/
private FSDefineShape rectangle(int identifier, int width, int height, FSColor color)
{
FSBounds bounds = new FSBounds(-width/2, -height/2, width/2, height/2);
ArrayList lineStyles = new ArrayList();
ArrayList fillStyles = new ArrayList();
lineStyles.add(new FSSolidLine(20, FSColorTable.black()));
fillStyles.add(new FSSolidFill(color));
ArrayList shapeRecords = new ArrayList();
shapeRecords.add(new FSShapeStyle(1, 1, 0, -width/2, -height/2));
shapeRecords.add(new FSLine(width, 0));
shapeRecords.add(new FSLine(0, height));
shapeRecords.add(new FSLine(-width, 0));
shapeRecords.add(new FSLine(0, -height));
return new FSDefineShape(identifier, bounds, fillStyles, lineStyles, new FSShape(shapeRecords));
}
/* Retourne le contenu du fichier comme une simple chaine.
*
* @param fileName le nom du fichier à lire.
*
* @return une String contenant le contenu du fichier.
*
* @throws FileNotFoundException si le fichier n’est pas trouvé.
* @throws IOException si une erreur apparaît pendant la lecture du fichier.
*/
private String contentsOfFile(String fileName) throws FileNotFoundException, IOException
{
String script = "";
File aFile = new File(fileName);
Etude des API java pour la génération de code Flash - Page 43/59
Probatoire CNAM 2007 – Nicolas Botet
if (aFile.exists())
{
byte[] fileIn = new byte[(int)aFile.length()];
FileInputStream fileContents = new FileInputStream(aFile);
fileContents.read(fileIn);
script = new String(fileIn);
fileContents.close();
}
else
{
throw new FileNotFoundException();
}
return script;
}
}
Illustration 23 : Illustration de l’exemple utilisant l’API Translate AS1
e)Licence d’utilisation
Cette API est fournie sous deux formes de licences différentes.
Une licence pour le développement d’application libre (GNU General Public License) et une
licence pour le développement d’application dont le code est propriétaire (Flagstone Software
License). En effet, le code source de l’API peut être utilisé sans que le code source principal
soit « open source ».
Etude des API java pour la génération de code Flash - Page 44/59
Probatoire CNAM 2007 – Nicolas Botet
f)Conclusion
Cette API, permet la génération de code SWF grâce à l’utilisation du langage action Script1.
Action Script1 est maintenant dépassé puisque la dernière version est l’Action Script 3. Cette
API peut servir dans le cadre d’analyse de fichier AS1 et surtout dans la génération de code
notamment en utilisant l’API Transform, offrant un large potentiel pour la génération de
fichier Flash.
Etude des API java pour la génération de code Flash - Page 45/59
Probatoire CNAM 2007 – Nicolas Botet
5.JSwiff
a)Présentation
L’API JSwiff a pour principale fonction de générer et d’analyser des fichiers « SWF ». Pour
cela, elle se sert des tags qui seront analysés ou créés. D’après les spécifications, cette API ne
permet pas, sans utiliser les tags, l’utilisation d’objets tels que les sons ou les images. Il en est
de même pour la création de fichiers SWF à partir de fichier XML. Cette API est fournie sous
licence GPL 1 ce qui lui permet d’être utilisée librement tout en respectant les clauses de la
licence. En cas de développement d’un logiciel propriétaire, il existe une licence
commerciale.
Nom
Version
Licence
Dernières modifications
Domaine d’intervention Flash
Documentation fournie
Outil fourni par l’API
Site Internet
JSwiff
8
GPL ou commerciale
Forum actif
Flash 8
***
JSwiff Investigator
http://www.jswiff.com/
Illustration 24 : Fiche récapitulative de l’API JSwiff
b)Utilisation
L’utilisation de cette API va permettre aux développeurs JAVA de générer et d’analyser des
fichiers SWF.
Illustration 25 : Exemple d’utilisation de l’API JSwiff
1
GPL : General Public License (V. Annexe)
Etude des API java pour la génération de code Flash - Page 46/59
Probatoire CNAM 2007 – Nicolas Botet
c)Architecture
L’API JSwiff permet la création de documents Flash. Pour cela, un document SWF est créé,
des tags lui sont ajoutés et enfin le document sera généré en fichier Flash.
Lors de la création d’un fichier Flash, la difficulté réside dans le choix et la configuration des
tags SWF.
L’API est composé de 10 packages :










com.jswiff : lecture et écriture de documents SWF
com.jswiff.hl.factories : création de document SWF à partir de documents multimédias
com.jswiff.io : implémente un bit stream pour la lecture ou l’écriture de documents
SWF
com.jswiff.listeners : creation SWFDocument
com.jswiff.swfrecords : gestion des objets qui seront affichés
com.jswiff.swfrecords.actions : gestion des actions
com.jswiff.swfrecords.tags : gestion des tags pour la création de document SWF
com.jswiff.tutorials : exemple pour utiliser l’API
com.jswiff.util : quelques classes utilitaires
com.jswiff.xml : gestion du XML
Etude des API java pour la génération de code Flash - Page 47/59
Probatoire CNAM 2007 – Nicolas Botet
d)Exemple
Exemple permettant la génération d’un fichier SWF
import com.jswiff.swfrecords.tags.*;
import com.jswiff.swfrecords.*;
import com.jswiff.*;
import java.util.*;
import java.io.*;
class Test {
public static void main(String[] args) {
String fileName
= "tutorial.swf";
SWFDocument document = createDocument();
try {
writeDocument(document, fileName);
} catch (IOException e) {
System.out.println("An error occured while writing " + fileName + ":");
e.printStackTrace();
}
}
private static void writeDocument(SWFDocument document, String fileName)
throws IOException {
SWFWriter writer = new SWFWriter(document, new FileOutputStream(fileName));
writer.write();
}
private static SWFDocument createDocument() {
// Création d’un nouveau document SWF
SWFDocument document = new SWFDocument();
// Définition de la fonte du texte
// Attribution d’un nouveau ID pour la fonte
int fontId = document.getNewCharacterId();
// Utilisation d’une fonte standard (Arial), we don't want to define shapes for each glyph
DefineFont2 defineFont2 = new DefineFont2(fontId, "Arial", null, null);
document.addTag(defineFont2);
// Attribution d’un nouveau ID pour le texte
int textId = document.getNewCharacterId();
// Utilisation du texte dynamique avec DefineEditText
DefineEditText defineEditText = new DefineEditText(
textId, new Rect(0, 0, 0, 0), null);
// Dimension du rectangle du texte à 0 donc « autosise » pour le visualiser.
defineEditText.setAutoSize(true);
// Attribution de la taille du texte 24 px en twips
defineEditText.setFont(fontId, 20 * 24);
// defintion de la couleur rouge pour le texte
defineEditText.setTextColor(new RGBA(255, 0, 0, 255));
// attribution « readOnly » au texte
defineEditText.setReadOnly(true);
// attribution du texte
defineEditText.setInitialText("Hello world!");
document.addTag(defineEditText);
// Poistionnement du texte à depth 1
PlaceObject2 placeObject2 = new PlaceObject2(1);
placeObject2.setCharacterId(textId);
// positionnement du texte an twips (45; 10)
placeObject2.setMatrix(new Matrix(20 * 45, 20 * 10));
document.addTag(placeObject2); // place le texte
document.addTag(new ShowFrame()); // show frame
return document;
}
}
Etude des API java pour la génération de code Flash - Page 48/59
Probatoire CNAM 2007 – Nicolas Botet
Création de deux fichiers « .bat »


Compil.bat : « javac -classpath D:\TestProba\JSwif\jswiff-8.0-beta-2\src\; Test.java »
Run.bat : « java -classpath D:\TestProba\JSwif\jswiff-8.0-beta-2\src; Test »
Illustration 26 : Création du fichier swf dans l’exemple utilisant l’API Transform SWF
Observations :
Après exécution du fichier «test.java », le fichier « tutorial.swf » a été généré. Le fichier
« hello.html » servira à afficher le fichier « SWF » dans le navigateur.
Illustration 27 : Résultat « tutorial.swf » dans l’exemple utilisant l’API Transform SWF
Etude des API java pour la génération de code Flash - Page 49/59
Probatoire CNAM 2007 – Nicolas Botet
Illustration 28 : Illustration de l’exemple utilisant l’API JSwiff
e)Licence d’utilisation
Cette API est fournie sous deux formes de licences différentes.
Une licence pour le développement d’application libre (GNU General Public License) et une
licence pour le développement d’application dont le code est propriétaire (commercial
licensing option). En effet, le code source de l’API peut être utilisé sans que le code source
principal soit sous licence « GPL » à condition de souscrire une licence commerciale.
f)Conclusion
Bien que cette API n’exploite pas les dernières fonctionnalités de Flash, elle propose un
ensemble de package offrant au développeur java un large éventail de possibilités notamment
pour la réalisation de fichier SWF.
Etude des API java pour la génération de code Flash - Page 50/59
Probatoire CNAM 2007 – Nicolas Botet
C.Comparaison des différentes API
Nous avons étudié plusieurs API Java permettant la génération de code Flash. Toutes ont leurs
spécificités et certaines sont complémentaires. Elles sont différentes de par la compatibilité de
la version Flash qu’elles pourront traiter, leur utilisation, leurs possibilités et l’activité des
forums.
Voici une classification permettant de les comparer.
1.Mise à jour de l’API
Si l’on s’intéresse, pour des raisons de pérennité, à une API évolutive et suscitant une
évolution de par ses développeurs, nous pouvons proposer le classement suivant :
API ne présentant pas un suivi récent :


JSwiff (2006)
JavaSWF2 (juillet 2003)
D’autres sont actualisées régulièrement et ont été mis à jour récemment :


Flagstone Software (janvier 2007)
Metaas (mars 2007)
2.Utilisation en fonction de la version Flash
Il est également intéressant de les comparer entre elles sur leurs compatibilités avec les
versions Flash. En effet, si l’on souhaite créer une animation Flash, au delà des nouvelles
fonctionnalités, la version du fichier SWF sera lisible par un lecteur Flash dernière génération.
Cependant, si l’on souhaite modifier ou analyser un fichier SWF dont la version est
supérieure, alors ce sera plus compliqué voire impossible.
Aujourd’hui, Flash propose la version 9.
Etude des API java pour la génération de code Flash - Page 51/59
Probatoire CNAM 2007 – Nicolas Botet
a)Compatibilité Flash
Compatibilité Flash 5 :



JAVASWF2
Transform SWF
JSwiff
Compatibilité Flash 7 :


Transform SWF (manipulation)
JSwiff
Compatibilité Flash 8 :


Transform SWF
JSwiff
Compatibilité Flash 9 :

Transform SWF
b)Compatibilité Action script
Action Script 1 :



JavaSWF2
Ttranlate AS1
JSwiff
Action Script 2 :


JavaSWF2
JSwiff
Action Script 3 :

Metaas
Etude des API java pour la génération de code Flash - Page 52/59
Probatoire CNAM 2007 – Nicolas Botet
3.Les licences
Les licences sous lesquelles sont distribuées ces API auront une influence sur la licence de
l’application développée. Ces API sont toutes proposées sous licence OpenSource pour une
utilisation non propriétaire. En effet certaines proposent une licence commerciale.
Licence LGPL
 Metaas
Licence GPL
 JSwiff
 Flagstone Translate AS1
Licence BSD
 JavaSWF2
 Flagstone Transform SWF
Utilisation pour un code source propriétaire
Les API
Flagstone Translate AS1 et JSwiff proposent une licence spéciale pour le
développement d’animation flash dont le code est propriétaire. JSwiff propose une licence
payante.
4.En résumé
Toutes ces API permettent la génération de code Flash. Chacune aura une utilité en fonction
du besoin exprimé par le développeur que se soit dans le cadre d’une création d’une animation
ou dans le cadre d’une manipulation d’animation.
a)Création d’animation
Dans le cas d’une création d’application Flash, il semble intéressant d’utiliser l’API Metaas
qui permettra de manipuler et générer du code Action Scrip3. Il sera également intéressant
d’utiliser l’API Flagstone qui génère et analyse des animations Flash version 9. L’utilisation
simultanée des ces deux API offrirait au développeur la manipulation de code AS3 et Flash9.
b)Modification d’animation
Dans le cas où le développeur souhaite manipuler une animation Flash existante, la
connaissance de la version Flash utilisée est importante pour choisir l’API appropriée. L’API
JSwiff est très bien documenté et permet la manipulation d’animation Flash de la version 1 à
8. Dans le cadre de l’utilisation de l’API JSwiff pour une application dont le code serait
propriétaire, une licence payante est à souscrire.
Etude des API java pour la génération de code Flash - Page 53/59
Probatoire CNAM 2007 – Nicolas Botet
API
Metaas
JavaSWF2
Flagstone Transform SWF
F
Dernière Version
Licence
0.7
LGPL
020729
BSD
2.1.5
BSD
2.
GP
Li
Date dernière modification
Compatibilité Flash
17/03/2007
Action script S 3.0
29/07/2003
Flash 4, 5, Action ScriptAS : ?
03
Ac
Documentation 1
Outil fourni par l’API
Site internet
**
*
http://www.badgers-infoil.co.uk/projects/metaas/
http://www.anotherbigidea.com
/javaswf/
03/01/2007
Manipulation Flash7
Analyse et génère Flash9
***
Describe SWF
http://www.flagstonesoftware
.com/
Illustration 29 : Fiche récapitulative des API étudiées
1
Qualité de la documentation : * faible, *** fournie
Etude des API java pour la génération de code Flash - Page 54/59
**
De
ht
e.c
Probatoire CNAM 2007 – Nicolas Botet
IV.Conclusion
Quelles technologies choisir ? Il est vrai qu’Adobe propose un ensemble d’applications
fournissant un large éventail de possibilités aux développeurs désirant générer du code Flash.
Flash est un langage à part entière, propriétaire, nécessitant une bonne expérience et une
maîtrise des outils. Alors que la génération de code Flash à partir de java permet à des
développeurs java connaissant la description d’un fichier Flash de pouvoir générer du code
depuis un serveur ou développer des applications sous une licence libre.
D’un autre côté, l’utilisation de java pour la création d’applications utilisant des animations
ou une forte utilisation du graphisme semble montrer ses limites : d’une part pour les
développeurs, d’autre part en terme d’efficacité. De plus, java est fortement utilisé au niveau
serveur pour le développement d’application web ou pour le développement de logiciel.
Associer JAVA et Flash présente donc un avantage aux développeurs. Cependant, il existe
d’autres moyens de générer du Flash à partir d’autres outils que ceux proposés par Adobe.
Notamment en utilisant des outils de développement libre comme OpenLazlo ou comme
MTASC pour la compilation de code.
Concernant l’ensemble de ces API, il semble important de souligner que la création de fichier
SWF ainsi que leur modification semble efficace pour des développeurs Java. Néanmoins, il
semble plus complexe et moins pratique de travailler sur des fichiers créés par un autre moyen
que l’API utilisée. En effet, une bonne connaissance de la technologie Flash est nécessaire
afin d’appréhender le langage de balise et les actions pouvant être exécutées grâce au langage
Action Script.
Il semble également intéressant d’analyser la rentabilité d’utilisation de ces API. En effet,
même si le code Flash est évolutif et portable pour chacun de ses derniers lecteurs, Flash
évolue rapidement pour gagner en efficacité et rapidité. Les API Java ont-elles un avenir
quant à la motivation et l’engouement de ceux qui les créent ? Est-il intéressant d’utiliser ces
API quand il existe d’autres outils mis à disposition des développeurs et qu’adobe propose le
compilateur Flex en open source. L’avenir de Flash semble se tourner vers la solution Flex,
orienté client serveur et permettant la création d’application asynchrone dans un
environnement libre.
Etude des API java pour la génération de code Flash - Page 55/59
Probatoire CNAM 2007 – Nicolas Botet
V.Bibliographie

Adobe Flash : http://fr.wikipedia.org

Adobe : spécification du format de fichier SWF

Le format SWF : http://cerig.efpg.inpg.fr/dossierthe.labs.com

Flash : http://www.mediabox.fr

Flash : www.flashxpress.net

Flash : www.zoneflash.net

Informations sur Flash : http://flash.developpez.com

Informations sur Flash : http://the.labs.com

API Metaas : http://www.badgers-in-foil.co.uk/projects/metaas

API Java SWF2 : http://www.anotherbigidea.com/javaswf

Flagstone software : www.flagstonesofware.com

API Flagstone Transform SWF : http://www.flagstonesoftware.com

API jswiff : http://www.jswiff.com

Divers définitions : http://fr.wikipedia.org

Critiques :
les.html

Architecture des SI : http://jl2tho.blogspot.com
http://jurassicgeek.blogspot.com/2007/02/java-nest-pas-la-solution-tous-
Etude des API java pour la génération de code Flash - Page 56/59
Probatoire CNAM 2007 – Nicolas Botet
ANNEXE I : Rappel sur les licences utilisées dans cette étude
GNU LGPL (GNU Lesser General Public License)
Cette licence, dont la dernière version est la 3, est rédigée par la Free Software Foundation
dans le but de promouvoir le logiciel libre.
Elle permet de pouvoir utiliser une bibliothèque tierce sans qu’elle hérite de la licence LGPL.
Un logiciel propriétaire pourra alors utiliser ce type de licence sans que son code devienne
une licence LGPL.
Cependant, toute modification d’un code source sous licence LGPL entrainera un produit fini
sous licence LGPL.
GNU GPL (GNU General Public License)
Cette licence, dont la dernière version est la 3, est rédigée par la Free Software Foundation
afin de pouvoir réutiliser du code dans un logiciel libre ou propriétaire. Son utilisation peut
servir à des logiciels commerciaux ou non. En cas de distribution, le développeur devra
fournir le code source de la version modifiée et souscrire à une licence GPL.
BSD (Berkeley Software Distribution License)
Cette licence est l’une des moins restrictives dans le monde informatique et s’approche de la
notion de « domaine public ». Le code sous cette licence peut être publié sous licence GPL.
L’inverse n’est pas possible sans l’autorisation des auteurs car la licence GPL est plus
restrictive.
Etude des API java pour la génération de code Flash - Page 57/59
Probatoire CNAM 2007 – Nicolas Botet
Flagstone Software License
(Version 1, April 2001)
1. Definitions
1.1 "Licenced Software" means the code and documentation and other materials accompanying this License.
1.3 "You" or "Your" means an individual or a legal entity exercising rights under this License. For legal entities,
"You" or "Your" includes any entity which controls, is controlled by, or is under common control with, You,
where "control" means (a) the power, direct or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of fifty percent (50%) or more of the outstanding shares or
beneficial ownership of such entity.
2. License.
Subject to the terms and conditions of this License, Flagstone Software Limited ("Flagstone") hereby grants you
a world-wide, royalty-free, non-exclusive license to do the following:
2.1 As an individual you may make and use copies of the Licenced Software for the purpose of designing and
developing your software product(s) provided that you are the only inidividual using the Licenced Software.
As an entity or organization you may make and use copies of the Licenced Softwareprovided that you have
acquired a separate and valid license for each each individual using the Licenced Software.
2.2 You may also store or install a copy of the Licenced Software on a network server only to install or run the
Licenced Software on computers used by a licenced end user. A single licence may not be shared or used
concurrently by other end users.
2.3 You may not translate, adapt, de-compile, reverse engineer or modify the Licenced Software.
2.4 You may reproduce and distribute the object code from any portion of the Licenced Software only as part of
a derivative work.
2.5 You may transfer your rights under this License provided you transfer this License and a copy of the
Software to a party who agrees to accept the terms of this License and destroy any other copies of the Software
in your possession.
3. Disclaimer of Warranties.
The Software is provided "AS IS" and without warranty of any kind. You acknowledge and agree that the use of
the Licenced Software is at your sole risk. FLAGSTONE DISCLAIMS ALL WARRANTIES, EXPRESSED
OR IMPLIED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT OF
THIRD PARTY RIGHTS.
FLAGSTONE DOES NOT WARRANT THAT THE USE OR THE RESULTS OF THE USE OF THE
LICENSED SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE. SHOULD THE LICENSED
SOFTWARE PROVE DEFECTIVE, YOU (AND NOT FLAGSTONE) ASSUME THE ENTIRE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION. Some countries do not allow the exclusion of
implied warranties therefore the above disclaimer may not apply to you.
4. Limitation of Liability.
UNDER NO CIRCUMSTANCES SHALL FLAGSTONE BE LIABLE FOR ANY INCIDENTAL, SPECIAL,
INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF OR THE INABILITY TO
USE THIS LICENSED SOFTWARE. Some countries do not allow the exclusion or limitation of liability for
consequential or incidental damages so the above disclaimer may not apply to you.
Etude des API java pour la génération de code Flash - Page 58/59
Probatoire CNAM 2007 – Nicolas Botet
5. Termination.
5.1 Termination. This License and the rights granted hereunder will terminate:
(a) automatically without notice from Flagstone if You fail to comply with any term(s) of this License and fail to
cure such breach within 30 days of becoming aware of such breach;
(b) immediately in the event of the circumstances described in Section 7.3(b); or
(c) automatically without notice from Flagstone if You, at any time during the term of this License, commence
an action for patent infringement against Flagstone.
5.2 Effect of Termination. Upon termination, You agree to immediately stop any further use, reproduction, and
distribution of the Licenced Software and to destroy all copies of the Licenced Software that are in Your
possession or control.
6. Export Law.
You expressly agree to comply with all rules, regulations and laws applicable to the export or re-export of the
Licenced Software except as authorized by the laws of the United Kingdom or any jurisdiction in which the
Licenced Software was obtained. The Licenced Software may not be exported or re-exported into, or to a
national or resident of, any country embargoed by the United Kingdom. By using the Licenced Software, you
represent and warrant that you are not located in, under control of, or a national or resident of any such country
or on any such list.
7. Miscellaneous.
7.1 Relationship of Parties. This License will not be construed as creating an agency, partnership, joint venture
or any other form of legal association between You and Flagstone, and You will not represent to the contrary,
whether expressly, by implication, appearance or otherwise.
7.2 Waiver; Construction. Failure by Flagstone to enforce any provision of this License will not be deemed a
waiver of future enforcement of that or any other provision. Any law or regulation which provides that the
language of a contract shall be construed against the drafter will not apply to this License.
7.3 Severability. (a) If for any reason a court of competent jurisdiction finds any provision of this License, or
portion thereof, to be unenforceable, that provision of the License will be enforced to the maximum extent
permissible so as to effect the economic benefits and intent of the parties, and the remainder of this License will
continue in full force and effect.
(b) Notwithstanding the foregoing, if applicable law prohibits or restricts You from fully and/or specifically
complying with Sections 2 and/or 3 or prevents the enforceability of either of those Sections, this License will
immediately terminate and You must immediately discontinue any use of the Licenced Software and destroy all
copies of it that are in your possession or control.
7.4 Entire Agreement; Governing Law. This License constitutes the entire agreement between the parties with
respect to the subject matter hereof. This License shall be governed by the laws of Scotland.
Etude des API java pour la génération de code Flash - Page 59/59
Téléchargement