13.07.2013 Views

Le cours en PDF (partie 3 - LIFL

Le cours en PDF (partie 3 - LIFL

Le cours en PDF (partie 3 - LIFL

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

MASTER IPM EAD 2010-2012<br />

Cours Flash<br />

Chapitre 6 : Programmation avec ActionScript 3, <strong>partie</strong> 3<br />

Rappel : les fichiers fla et swf sont dans le fichier « 6_Programmation_AS3_3.zip ».<br />

SOMMAIRE<br />

1 CHARGEMENT DE FICHIERS SWF ..................................................................................................... 2<br />

2 CHARGEMENT DE TEXTE ET DE VARIABLES ................................................................................ 3<br />

2.1 CHARGEMENT DE TEXTE ............................................................................................................................ 3<br />

2.2 CHARGEMENT DE VARIABLES .................................................................................................................... 3<br />

3 XML .............................................................................................................................................................. 5<br />

4 LE DOCUMENTCLASS ............................................................................................................................ 8<br />

4.1 SI VOUS AVEZ DES CONNAISSANCES EN POO ............................................................................................ 8<br />

4.2 SI VOUS N’AVEZ PAS DE CONNAISSANCE EN POO ...................................................................................... 9<br />

5 PROGRAMMATION ORIENTEE OBJET (POO) ............................................................................... 10<br />

6 CONNEXION AVEC PHP ....................................................................................................................... 11<br />

6.1 ENVOI DE DONNEES A PHP EN MODE GET .............................................................................................. 11<br />

6.2 EXEMPLE 2 : ENVOI DISCRET DES DONNEES ET TRAITEMENT APRES EXECUTION DU PHP ........................ 13<br />

7 PHP ET MYSQL ....................................................................................................................................... 17<br />

8 APPELER UNE PAGE WEB NAVIGATETOURL .............................................................................. 19<br />

8.1 PREAMBULE ............................................................................................................................................ 19<br />

8.2 PARAMETRES DE PUBLICATION DE FLASH CS3 ........................................................................................ 19<br />

8.3 LA FONCTION NAVIGATETOURL ............................................................................................................. 23<br />

9 C’EST FINI ! ............................................................................................................................................. 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

1 Chargem<strong>en</strong>t de fichiers SWF<br />

Une animation Flash (SWF) peut charger dynamiquem<strong>en</strong>t d’autres SWF. Cette possibilité<br />

offre plusieurs intérêts :<br />

- le travail <strong>en</strong> équipe. Chaque membre de l’équipe peut ainsi travailler sur une<br />

animation séparée, et il suffit <strong>en</strong>suite d’avoir une animation qui s’occupe de charger et<br />

décharger les animations selon les besoins.<br />

- la découpe du travail. Même si vous travaillez seul, il est plus facile d’avoir 10 petites<br />

animations qu’une seule qui représ<strong>en</strong>te la somme des 10 petites.<br />

- la maint<strong>en</strong>ance. Quand vous devez corriger une erreur, modifier une petite animation<br />

sera plus rapide que modifier une grosse animation.<br />

- un chargem<strong>en</strong>t + rapide. Quand vous découpez une animation, essayez de faire une<br />

petite première animation. Ainsi, elle se chargera très vite, ce qui est intéressant pour<br />

Internet…<br />

Vous trouverez un exemple complet dans « animation qui charge.fla » et « animation<br />

chargée.fla ».<br />

- Animation chargée. Cette animation conti<strong>en</strong>t :<br />

o un fond de scène bleu foncé ;<br />

o un clip « vert » qui réagit au clic sur lui ;<br />

o un bouton qui <strong>en</strong>voie un message à l’« animation qui charge » cette animation.<br />

Pour que le message (c'est-à-dire un événem<strong>en</strong>t) soit <strong>en</strong>voyé à l’animation qui<br />

charge, on utilise MovieClip(racine) avec racine égal à<br />

root.par<strong>en</strong>t.root pour accéder à la scène qui charge. La raison est assez<br />

technique et n’a pas d’intérêt pour votre formation. N’hésitez pas à faire du<br />

copier-coller de mon code dans vos animations. Repr<strong>en</strong>ez la variable racine et<br />

le code MovieClip(racine) pour accéder à la scène qui charge. Dans mon<br />

exemple, vous verrez ainsi qu’on accède au clip « rouge » dans la scène qui<br />

charge.<br />

- Animation qui charge. Cette animation conti<strong>en</strong>t :<br />

o un fond de scène jaune ;<br />

o un clip « rouge » qui ne fait ri<strong>en</strong> ;<br />

o un bouton qui <strong>en</strong>voie un message au clip « vert » de l’animation chargée. Pour<br />

charger l’animation, on utilise un Loader et un URLRequest. Ici aussi, ne vous<br />

préoccupez pas des détails techniques. Faites du copier-coller et changez<br />

seulem<strong>en</strong>t le nom et le chemin du fichier SWF à charger. Notez que vous<br />

devez faire un addChild pour que l’animation chargée soit affichée sur la<br />

scène. Pour accéder à la scène chargée, on utilise<br />

MovieClip(chargeur.cont<strong>en</strong>t).<br />

Quelques remarques :<br />

- si vous testez « animation chargée » seule, vous aurez un message d’erreur si vous<br />

cliquez sur le bouton puisque l’animation visée par le bouton n’est pas chargée avant.<br />

Pour tester l’<strong>en</strong>semble correctem<strong>en</strong>t, vous devez lancer « animation qui charge » <strong>en</strong><br />

premier.<br />

- Une animation chargée a toujours sa scène qui devi<strong>en</strong>t transpar<strong>en</strong>te. Seuls les objets<br />

prés<strong>en</strong>ts sur la scène rest<strong>en</strong>t visibles. Vous aurez certainem<strong>en</strong>t constaté que la couleur<br />

bleue de la scène chargée a disparu.<br />

- si vous modifier l’une ou l’autre animation, n’oubliez pas de recréer le SWF associé<br />

pour que l’<strong>en</strong>semble fonctionne correctem<strong>en</strong>t.<br />

Flash : Découverte d’Action Script Page 2 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

2 Chargem<strong>en</strong>t de texte et de variables<br />

2.1 Chargem<strong>en</strong>t de texte<br />

Il est très intéressant de pouvoir charger du texte dynamiquem<strong>en</strong>t. Cela vous permet par<br />

exemple sur une page web d’avoir une animation Flash qui affiche le dicton du jour, le Saint<br />

du jour, etc., sans devoir regénérer le SWF chaque fois.<br />

Note : l’aspect multilingue sort du cadre IPM, mais au fur et à mesure des versions de<br />

Flash, cette fonctionnalité se simplifie. N’hésitez pas à consulter l’aide sur ce point si<br />

vous <strong>en</strong> avez besoin <strong>en</strong> stage.<br />

Pour charger un fichier texte, il faut d’abord <strong>en</strong> avoir un ☺. Vous trouverez un exemple<br />

simple dans « La Programmation Objet.txt ». Son cont<strong>en</strong>u n’a aucune importance <strong>en</strong> luimême<br />

pour ce <strong>cours</strong>, mais il faut juste compr<strong>en</strong>dre que ce doit être du texte pur, c'est-à-dire<br />

pas de mise <strong>en</strong> forme tel que gras, italique, polices différ<strong>en</strong>tes, etc. Vous pouvez donc le créer<br />

avec n’importe quel logiciel de texte (bloc note, Wordpad, Word,…).<br />

Ensuite, pour charger le fichier texte, il suffit de quelques lignes. Vous trouverez un exemple<br />

simple dans « lecture texte.fla ». Notez que pour que cet exemple fonctionne, j’ai déposé une<br />

occurr<strong>en</strong>ce du composant TextArea sur la scène, et je lui ai donné un nom d’occurr<strong>en</strong>ce. Sur<br />

le principe, il faut vous rappeler que lors d’un chargem<strong>en</strong>t d’un fichier externe (comme un<br />

fichier texte, mais aussi XML comme nous le verrons un peu plus loin) le cont<strong>en</strong>u du fichier<br />

n’est accessible qu’après avoir été chargé, ce qui est possible grâce au list<strong>en</strong>er sur<br />

Ev<strong>en</strong>t.COMPLETE. Vous accédez alors au cont<strong>en</strong>u par URLLoader(e.target).data.<br />

Dans « lecture texte avec boutons.fla », vous trouverez un autre exemple permettant de<br />

charger au choix 3 textes grâce à 3 boutons.<br />

2.2 Chargem<strong>en</strong>t de variables<br />

Maint<strong>en</strong>ant que vous savez comm<strong>en</strong>t charger du texte, nous allons améliorer cette technique<br />

pour charger des variables avec leur cont<strong>en</strong>u. Comme exemple, supposons que dans notre<br />

animation vous vouliez afficher la date, le dicton et les fêtes du jour, mais que vous ne voulez<br />

pas passer par une base de données. Dans ce cas, vous pouvez utiliser un fichier de variables<br />

pour résoudre ce problème.<br />

Vous trouverez la solution dans « lecture fichiers de variables.fla ». Cette animation charge le<br />

fichier « dicton du jour.txt » qui est un fichier texte pur (comme précédemm<strong>en</strong>t), mais la<br />

différ<strong>en</strong>ce est dans son cont<strong>en</strong>u et son interprétation. En effet, le fichier est structuré sous la<br />

forme :<br />

nomDeVariable1=valeur&nomDeVariable2=valeur&nomDeVariable3=valeur…<br />

Dans le fichier, vous trouverez ainsi une variable date_du_jour, une variable dicton et une<br />

variable saints. <strong>Le</strong> chargem<strong>en</strong>t du fichier se fait de façon similaire à ce que nous avons vu<br />

juste avant, mais la différ<strong>en</strong>ce fondam<strong>en</strong>tale est dans l’interprétation du cont<strong>en</strong>u. En effet, la<br />

ligne uneInfo.dataFormat = URLLoaderDataFormat.VARIABLES dit que Flash doit<br />

interpréter le cont<strong>en</strong>u comme des variables avec leur valeur, et non pas comme du simple<br />

texte. Sachez pour information qu’<strong>en</strong> plus du format VARIABLES, il existe le format TEXT qui<br />

est le format par défaut (c’est pour cela que je ne l’ai pas écrit précédemm<strong>en</strong>t), et le format<br />

BINARY qui vous permet de charger des données binaires.<br />

Flash : Découverte d’Action Script Page 3 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Cet exemple vous montre égalem<strong>en</strong>t comm<strong>en</strong>t gérer une erreur de chargem<strong>en</strong>t du fichier. Il<br />

existe beaucoup de types d’erreurs différ<strong>en</strong>tes qui peuv<strong>en</strong>t toutes être gérées<br />

indép<strong>en</strong>damm<strong>en</strong>t, mais ceci est un boulot d’informatici<strong>en</strong>, pas d’IPM. Ret<strong>en</strong>ez juste que ça<br />

existe.<br />

Pour <strong>en</strong> finir sur cet exemple, il n’est pas utile de tout compr<strong>en</strong>dre. Vous pouvez ici <strong>en</strong>core<br />

faire du copier-coller <strong>en</strong> changeant simplem<strong>en</strong>t le nom et l’adresse du fichier, ainsi que son<br />

cont<strong>en</strong>u bi<strong>en</strong> sûr ☺. Par contre, ce format d’échange (variable=valeur&…) est à mémoriser<br />

car c’est un de ceux que Flash utilise pour communiquer avec PHP.<br />

Flash : Découverte d’Action Script Page 4 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

3 XML<br />

Cette <strong>partie</strong> suppose que vous connaissez XML. Si ce n’est pas le cas, consultez<br />

év<strong>en</strong>tuellem<strong>en</strong>t les ressources nécessaires, par exemple votre <strong>cours</strong> XML, des livres ou des<br />

sites internet.<br />

Pour cette <strong>partie</strong>, nous nous intéressons uniquem<strong>en</strong>t aux fichiers XML (.xml) ; nous<br />

n’abordons pas les DTD, Schema, fichiers XSL ou XSLT, et autres fichiers <strong>en</strong> rapport avec la<br />

technologie XML.<br />

<strong>Le</strong> but de cette <strong>partie</strong> est de compr<strong>en</strong>dre comm<strong>en</strong>t Flash peut lire un fichier XML, et naviguer<br />

dans des données XML. Nous ne verrons pas comm<strong>en</strong>t créer des données XML (<strong>en</strong> mémoire<br />

uniquem<strong>en</strong>t car Flash n’autorise pas la création de fichier sur votre disque dur pour des<br />

raisons de sécurité) car cela va au-delà de ce qu’on att<strong>en</strong>d de vous <strong>en</strong> IPM, mais sachez que la<br />

création de données XML et leur manipulation <strong>en</strong> mémoire est tout à fait possible avec Flash.<br />

Depuis la version CS3, Flash manipule XML <strong>en</strong> utilisant ECMAScript pour XML (E4X), ce<br />

qui le r<strong>en</strong>d aussi performant que Java par exemple.<br />

Un exemple courant d’utilisation d’XML est la lecture de flux RSS. Si cela vous intéresse,<br />

vous trouverez un exemple dans l’aide de Flash dans la rubrique « Utilisation de XML ><br />

Exemple : Chargem<strong>en</strong>t de données RSS depuis Internet ».<br />

Pour faire simple, au cas où vous n’auriez à ce mom<strong>en</strong>t précis aucune connaissance sur XML,<br />

ret<strong>en</strong>ez que XML est un format de données textuelles, structurées <strong>en</strong> balises (comme HTML)<br />

où les balises peuv<strong>en</strong>t être ce qu’on veut.<br />

Voici un petit exemple (fichier « carnet.xml ») qui va nous servir juste après :<br />

<br />

<br />

<br />

Durand<br />

Eric<br />

eric@durand.com<br />

<br />

<br />

Martin<br />

Eva<br />

eva@martin.com<br />

<br />

<br />

Dupont<br />

Luc<br />

luc@dupont.com<br />

<br />

<br />

Note : vous pouvez ouvrir ce fichier avec le bloc-notes, Wordpad, Word, et même<br />

votre navigateur web. Att<strong>en</strong>tion, certains (comme Chrome) n’afficheront pas les<br />

balises. Dans ce cas, vous devrez demander à afficher le code source pour voir les<br />

balises.<br />

Flash : Découverte d’Action Script Page 5 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Comme <strong>en</strong> HTML, toute balise ouverte doit être fermée, et on peut imbriquer des balises dans<br />

des balises. En XML, on parle de balise (par exemple ), mais égalem<strong>en</strong>t de nœud (le<br />

nœud ‘nom’) car un fichier XML (comme HTML) peut être vu comme un arbre. Il y a la<br />

racine (ici le nœud ‘carnet’), et les fils de la racine (les ‘personne’), qui ont eux-mêmes<br />

d’autres nœuds fils (‘nom’, ‘pr<strong>en</strong>om’ et ‘adressemail’). Un nœud peut avoir des attributs ;<br />

par exemple le nœud ‘personne’ a 3 fils (‘nom’, ‘pr<strong>en</strong>om’…) et un attribut ‘numeroSecu’.<br />

Vous avez la même chose avec HTML par exemple où IMG est le nœud et SRC<br />

est un attribut.<br />

<strong>Le</strong> fichier XML ci-dessus conti<strong>en</strong>t donc 3 personnes, ayant chacune un nom, un prénom et un<br />

email, ainsi qu’un n° de sécurité sociale (simplifié). Nous allons voir comm<strong>en</strong>t charger ce<br />

fichier et trouver des informations dans ce fichier (qui pourrait cont<strong>en</strong>ir des c<strong>en</strong>taines de<br />

personnes…).<br />

<strong>Le</strong> fichier « XML.fla » conti<strong>en</strong>t 3 versions de lecture du fichier XML « carnet ». Vous noterez<br />

au passage qu’on charge un docum<strong>en</strong>t XML de façon similaire à un fichier texte…<br />

- La version 1 se cont<strong>en</strong>te d’afficher tout ce qui a été chargé. Vous remarquerez que<br />

seules les données XML sont gardées, l’<strong>en</strong>-tête est ignoré<br />

par Flash.<br />

- La version 2 fait une requête dans les données pour ne garder que les nœuds ‘nom’ et<br />

stocke le résultat dans une liste (XMLList), ce qui facilite <strong>en</strong>suite le traitem<strong>en</strong>t de ces<br />

données. Cette requête est faite grâce à new XMLList(arboXML.personne.nom). La<br />

lecture du résultat est traitée par une boucle ‘for each’. <strong>Le</strong> résultat affiché est :<br />

Durand<br />

Martin<br />

Dupont<br />

- La version 3 est un exemple de ce que l’on fait généralem<strong>en</strong>t avec XML dans Flash,<br />

c'est-à-dire naviguer dans les données pour <strong>en</strong> extraire ce dont on a besoin. Rappelezvous<br />

qu’on peut égalem<strong>en</strong>t créer des données XML <strong>en</strong> mémoire (fonction<br />

app<strong>en</strong>dChild par exemple), mais que ceci est hors programme pour IPM.<br />

Dans cette version 3, on affiche :<br />

• tous les nœuds ‘personne’ (et leur cont<strong>en</strong>u) avec trace(arboXML.personne)<br />

• la seconde personne (car les tableaux comm<strong>en</strong>c<strong>en</strong>t toujours à l’indice 0) avec<br />

trace(arboXML.personne[1])<br />

• le nombre d’<strong>en</strong>fants (c'est-à-dire de nœuds fils) du second nœud ‘personne’<br />

avec trace(arboXML.personne[1].childr<strong>en</strong>().l<strong>en</strong>gth()). Ce nœud a 3<br />

fils (nom, pr<strong>en</strong>om et adressemail).<br />

• <strong>Le</strong> nom de la personne dont l’attribut numeroSecu est égal à 789 avec<br />

trace(arboXML.personne.(@numeroSecu=="789").nom), c'est-à-dire<br />

Dupont.<br />

• <strong>Le</strong> nombre de fils de la racine, c'est-à-dire le nombre de fils du nœud ‘carnet’,<br />

donc le nombre de personnes, c'est-à-dire 3, avec<br />

trace(arboXML.childr<strong>en</strong>().l<strong>en</strong>gth()).<br />

• <strong>Le</strong> nœud ‘personne’ dont le nœud nom est égal à Martin avec<br />

trace(arboXML.personne.(nom=="Martin")).<br />

<strong>Le</strong> résultat final est :<br />

<br />

Durand<br />

Eric<br />

eric@durand.com<br />

<br />

Flash : Découverte d’Action Script Page 6 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

<br />

Martin<br />

Eva<br />

eva@martin.com<br />

<br />

<br />

Dupont<br />

Luc<br />

luc@dupont.com<br />

<br />

<br />

Martin<br />

Eva<br />

eva@martin.com<br />

<br />

3<br />

Dupont<br />

3<br />

<br />

Martin<br />

Eva<br />

eva@martin.com<br />

<br />

P<strong>en</strong>sez pour finir que le fichier XML à charger peut prov<strong>en</strong>ir de votre disque dur ou d’une<br />

URL, donc r<strong>en</strong>voyé par un script PHP par exemple ☺.<br />

Flash : Découverte d’Action Script Page 7 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

4 <strong>Le</strong> docum<strong>en</strong>tClass<br />

Cette <strong>partie</strong> est à la limite du <strong>cours</strong> IPM. J’<strong>en</strong>t<strong>en</strong>ds par là que vous n’êtes pas du tout obligés<br />

de la faire, mais que si vous le faites, cela sera un plus pour vous dans votre niveau Flash. De<br />

plus, ce que nous allons voir ici (ainsi que dans la <strong>partie</strong> suivante consacrée à la POO) est<br />

extrêmem<strong>en</strong>t courant <strong>en</strong> programmation Flash. Vous risquez donc fort de le r<strong>en</strong>contrer dans<br />

votre future vie professionnelle.<br />

Ouvrez le fichier « classe de docum<strong>en</strong>t.fla ». Vous verrez qu’il ne conti<strong>en</strong>t qu’un champ texte<br />

dynamique avec un cont<strong>en</strong>u « aaaaaa…. ». Il n’y a aucune ligne de code AS3 dans ce fichier.<br />

Pourtant, quand vous l’exécutez, le champ texte affiche un autre cont<strong>en</strong>u et si vous cliquez<br />

dessus, son cont<strong>en</strong>u change à nouveau. Il y a donc du code « quelque part » ☺, mais où ???<br />

La réponse est cachée dans les propriétés du docum<strong>en</strong>t (cf. Figure 1). <strong>Le</strong> champ « classe du<br />

docum<strong>en</strong>t » conti<strong>en</strong>t le nom d’un fichier AS3 cont<strong>en</strong>ant le code qui jusqu’à prés<strong>en</strong>t était écrit<br />

dans le scénario principal. Ce fichier s’appelle ici « MaClasse », mais le nom exact est<br />

« MaClasse.as ». Ce fichier se trouve dans le même dossier que le fichier FLA. Vous pouvez<br />

l’ouvrir soit depuis votre disque dur (c’est un simple fichier texte qui normalem<strong>en</strong>t s’ouvrira<br />

dans Flash) soit <strong>en</strong> cliquant sur le stylo à droite du champ « classe du docum<strong>en</strong>t ». Cette<br />

dernière solution est la plus rapide et la plus sûre ; si le fichier n’existe pas, Flash vous le dira<br />

tout de suite.<br />

Figure 1 : propriétés du docum<strong>en</strong>t<br />

Ouvrez à prés<strong>en</strong>t ce fichier MaClasse.as. Si vous avez des connaissances <strong>en</strong> programmation<br />

ori<strong>en</strong>té objet (POO), vous pouvez lire le paragraphe ci-dessous, sinon passez au paragraphe<br />

d’après.<br />

4.1 Si vous avez des connaissances <strong>en</strong> POO<br />

- Toute classe AS3 doit être dans un package dont le nom est optionnel s’il se trouve<br />

dans le même dossier que le FLA. Dans le cas contraire, vous devez lui donner un<br />

nom et respecter le chemin d’accès comme <strong>en</strong> Java par exemple.<br />

- La classe et le nom du fichier .as doiv<strong>en</strong>t avoir exactem<strong>en</strong>t le même nom.<br />

- Un package peut cont<strong>en</strong>ir plusieurs classes, mais il est fortem<strong>en</strong>t conseillé de n’<strong>en</strong><br />

mettre qu’une par fichier .as.<br />

- AS3 utilise l’héritage simple, les interfaces, et les imports de façon semblable à Java.<br />

Pour le cont<strong>en</strong>u des packages livrés avec Flash, reportez-vous à l’aide ou autre.<br />

- <strong>Le</strong> constructeur d’une classe est obligatoirem<strong>en</strong>t public.<br />

- La définition des méthodes respecte la même structure que les fonctions vues<br />

précédemm<strong>en</strong>t ; il faut juste ajouter public, private, etc.<br />

Flash : Découverte d’Action Script Page 8 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

- Quand vous créez un SWF à partir d’un FLA qui utilise un fichier .AS, le SWF<br />

conti<strong>en</strong>t à la fois le .FLA et le .AS. Vous ne pouvez pas exécuter directem<strong>en</strong>t un .AS ;<br />

vous devez au minimum avoir un .FLA vide qui l’appelle.<br />

Pour résumer, cette classe MaClasse ét<strong>en</strong>d la classe Sprite qui est la classe associée de base<br />

à la scène d’une animation Flash. Son constructeur affiche un cont<strong>en</strong>u dans le champ texte<br />

« zoneAffichage » et définit un comportem<strong>en</strong>t sur le clic pour ce champ texte.<br />

4.2 Si vous n’avez pas de connaissance <strong>en</strong> POO<br />

L’utilisation d’un fichier .as comme classe de docum<strong>en</strong>t permet de séparer clairem<strong>en</strong>t le<br />

travail du graphiste de celui de l’informatici<strong>en</strong>. <strong>Le</strong> graphiste se conc<strong>en</strong>tre sur la <strong>partie</strong><br />

animation dans Flash, et l’informatici<strong>en</strong> travaille de son côté sur le comportem<strong>en</strong>t des objets<br />

prés<strong>en</strong>ts dans l’animation. La seule contrainte est de savoir avant quels sont les objets qui<br />

seront manipulés par programmation, c'est-à-dire leurs noms et leurs localisations (sur la<br />

scène, dans des clips, etc.).<br />

<strong>Le</strong> fichier « MaClasse.as » définit ainsi le cont<strong>en</strong>u et le comportem<strong>en</strong>t du champ texte<br />

zoneAffichage. Si demain, vous décidez que le cont<strong>en</strong>u doit être différ<strong>en</strong>t, ou que le champ<br />

texte doit réagir au MOUSE_OVER et non plus au MOUSE_CLICK, vous ne changerez que ce<br />

fichier (vous pouvez essayer <strong>en</strong> <strong>en</strong>levant les comm<strong>en</strong>taires). Par contre, si vous décidez<br />

d’ajouter un clip et un comportem<strong>en</strong>t pour ce clip, il faudra modifier le FLA et le .AS. Nous<br />

verrons un autre exemple de classe AS3 dans la <strong>partie</strong> suivante. Sachez <strong>en</strong>fin que le SWF issu<br />

du FLA conti<strong>en</strong>t égalem<strong>en</strong>t le .AS qui lui est associé. Vous ne livrez donc que le SWF à votre<br />

cli<strong>en</strong>t (jamais le FLA et le AS).<br />

Flash : Découverte d’Action Script Page 9 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

5 Programmation ori<strong>en</strong>tée objet (POO)<br />

Nous allons voir ici comm<strong>en</strong>t donner du comportem<strong>en</strong>t à un clip <strong>en</strong> écrivant le code AS3 <strong>en</strong><br />

dehors du fichier FLA qui le conti<strong>en</strong>t. Cela permet, comme vu juste avant, de séparer le<br />

travail du graphiste et de l’informatici<strong>en</strong>. Nous allons donc écrire une classe AS3 décrivant le<br />

comportem<strong>en</strong>t d’un clip dont le cont<strong>en</strong>u graphique est dans un FLA.<br />

Note : Si vous avez des connaissances <strong>en</strong> POO, sachez qu’avec AS3, vous pouvez<br />

créer vos propres classes, mais nous ne verrons pas cet aspect dans ce <strong>cours</strong> car cela<br />

est hors cont<strong>en</strong>u IPM.<br />

Que vous connaissiez ou non la POO, je ne donne ici que le strict minimum d’informations<br />

pour que vous compr<strong>en</strong>iez le fonctionnem<strong>en</strong>t de ce type de programmation. Je n’att<strong>en</strong>ds pas<br />

de vous que vous sachiez créer des classes de ce type ; ceci est pour les informatici<strong>en</strong>s ou les<br />

Flasheurs chevronnés.<br />

Ouvrez le fichier « Agneaux avec classe agneau.fla » et regardez le code de l’image 1. On y<br />

trouve un code semblable à celui que nous avons vu il y a quelques temps, unAgneau = new<br />

Agneau(stage.stageWidth, stage.stageHeight). Ce code crée une occurr<strong>en</strong>ce<br />

d’Agneau, symbole clip prés<strong>en</strong>t dans la bibliothèque et exporté pour AS3. La différ<strong>en</strong>ce ici<br />

est que j’ai <strong>en</strong> plus écrit du code dans le fichier « Agneau.as » et que ce code décrit le<br />

comportem<strong>en</strong>t d’une occurr<strong>en</strong>ce de ce symbole Agneau. Pour que tout ceci fonctionne, il faut<br />

que :<br />

- <strong>Le</strong> fichier Agneau.as soit dans le même dossier que le FLA<br />

- <strong>Le</strong> symbole AgneauClip soit exporté sous le nom Agneau.<br />

- <strong>Le</strong> nom d’exportation et le nom du .as soi<strong>en</strong>t id<strong>en</strong>tiques.<br />

Si vous regardez à prés<strong>en</strong>t le fichier Agneau.as, vous verrez du code très proche de ce que<br />

nous avons écrit jusqu’à maint<strong>en</strong>ant ; des fonctions décriv<strong>en</strong>t le comportem<strong>en</strong>t sur le clic, le<br />

mouse over, etc.<br />

Quel est l’intérêt de ceci ? Imaginons que votre cli<strong>en</strong>t vous demande une modification dans le<br />

dessin de l’agneau ; dans ce cas, vous demandez à votre graphiste de modifier le clip dans le<br />

FLA, et donc le .AS reste intact et toujours valable. Maint<strong>en</strong>ant, si votre cli<strong>en</strong>t vous demande<br />

de changer le comportem<strong>en</strong>t des agneaux, vous demandez à votre programmeur de modifier le<br />

fichier .AS et donc on garde intact le FLA. Si maint<strong>en</strong>ant on vous demande de modifier les<br />

deux, vous pouvez le faire faire <strong>en</strong> parallèle à votre graphiste et votre programmeur. Sur un<br />

petit exemple comme celui-ci, cela paraît inutile, mais sachez qu’une « vraie » animation<br />

Flash nécessite souv<strong>en</strong>t des dizaines de FLA et au moins autant de .AS !<br />

Si vous ouvrez maint<strong>en</strong>ant « classe agneau.fla », il n’y a plus du tout de code et pourtant<br />

on crée des occurr<strong>en</strong>ces d’agneaux… La solution a été vue précédemm<strong>en</strong>t… la classe du<br />

docum<strong>en</strong>t ! Je vous laisse regarder son cont<strong>en</strong>u. Il n’y a ri<strong>en</strong> de nouveau. J’ai juste ici utilisé à<br />

la fois la classe de docum<strong>en</strong>t et une classe pour le clip Agneau.<br />

Flash : Découverte d’Action Script Page 10 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

6 Connexion avec PHP<br />

Nous allons voir dans cette <strong>partie</strong> comm<strong>en</strong>t <strong>en</strong>voyer des données à PHP et <strong>en</strong> recevoir de<br />

PHP. La connexion avec des bases des données type MySQL étant directem<strong>en</strong>t associée à<br />

PHP, nous n’<strong>en</strong> verrons pas d’exemple ici ; puisque nous aurons vu comm<strong>en</strong>t <strong>en</strong>voyer des<br />

données de PHP à Flash, que ces données soit issues ou non d’une base de données ne change<br />

ri<strong>en</strong> à l’<strong>en</strong>voi de ces données.<br />

6.1 Envoi de données à PHP <strong>en</strong> mode GET<br />

Dans ce premier exemple, nous allons utiliser un formulaire de saisie fait <strong>en</strong> Flash, affiché<br />

dans une page web. Quand on valide le formulaire, on <strong>en</strong>voie son cont<strong>en</strong>u à PHP qui le traite<br />

et affiche une nouvelle page web avec les données qu’il a reçues de Flash.<br />

Ouvrez le fichier « <strong>en</strong>voi de données à PHP.fla ». Je vous laisse le soin de regarder les<br />

champs texte utilisés et leurs noms d’occurr<strong>en</strong>ce. <strong>Le</strong> code AS3 fonctionne de la façon<br />

suivante :<br />

- Pour passer des données de Flash à PHP, Flash appelle la page PHP par la fonction<br />

navigateToURL cont<strong>en</strong>ant une variable cont<strong>en</strong>ant l’URL visée. navigateToURL est<br />

une solution ; nous <strong>en</strong> verrons une autre dans 6.2.<br />

- Cette variable précise si on utilise du GET ou du POST pour <strong>en</strong>voyer les données.<br />

- Cette variable conti<strong>en</strong>t égalem<strong>en</strong>t les données à <strong>en</strong>voyer dans sa propriété data.<br />

- <strong>Le</strong>s données textuelles des champs du formulaire sont stockées dans la variable<br />

donnéesFormulaire. Cette variable est du type URLVariables qui, comme nous<br />

l’avons déjà vu, conti<strong>en</strong>t par défaut du texte. Vous pouvez ajouter autant de données<br />

textuelles que vous voulez (sans toutefois stocker des Mo !). Cette variable est<br />

associée au data de la variable du navigateToURL<br />

Pour le dire plus « simplem<strong>en</strong>t », vous stockez les données que vous voulez <strong>en</strong>voyer dans une<br />

variable de type URLVariables, et vous stockez <strong>en</strong>suite cette variable URLVariable<br />

dans la propriété data la variable de type URLRequest que vous passez <strong>en</strong> paramètre à la<br />

fonction navigateToURL. On peut comparer cela à quelqu'un qui <strong>en</strong>verrait un vase fragile<br />

par la poste. Il mettrait son vase (les données que vous voulez <strong>en</strong>voyer à PHP) dans un carton<br />

(la variable URLVariable), puis ce carton dans un autre carton (la variable URLRequest)<br />

qu’il <strong>en</strong>voie (navigateToURL) <strong>en</strong>suite par la poste.<br />

Code FLA<br />

// Définition du list<strong>en</strong>er pour le bouton<br />

boutonEnvoi.addEv<strong>en</strong>tList<strong>en</strong>er(MouseEv<strong>en</strong>t.CLICK, <strong>en</strong>voiMessage);<br />

// fonction qui récupère les textes dans le formulaire et les <strong>en</strong>voie à PHP<br />

function <strong>en</strong>voiMessage(evt:MouseEv<strong>en</strong>t):void<br />

{<br />

// on récupère les textes saisis dans le formulaire<br />

var unMessage:URLVariables = new URLVariables();<br />

unMessage.sujet = sujet.text;<br />

unMessage.destinataire = destinataire.text;<br />

unMessage.messageMail = texteMessage.text;<br />

// on prépare l'<strong>en</strong>voi <strong>en</strong> GET à la page PHP<br />

var requete:URLRequest = new URLRequest("<strong>en</strong>voi_GET.php");<br />

requete.method = URLRequestMethod.GET;<br />

// on charge les données dans "data"<br />

Flash : Découverte d’Action Script Page 11 sur 24


}<br />

Code PHP<br />


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Figure 2 : <strong>Le</strong> formulaire Flash avant l’<strong>en</strong>voi à PHP<br />

Figure 3 : résultat affiché par PHP après l’<strong>en</strong>voi depuis Flash<br />

Note importante :<br />

Quand vous ferez des essais, n’oubliez pas de vérifier que la version que vous testez dans la<br />

page HTML est la bonne version. En effet, vos navigateurs utilis<strong>en</strong>t des caches, et vos SWF<br />

sont stockés dans ces caches. Donc pour être sûr que votre version actuelle est bi<strong>en</strong> celle que<br />

vous voyez dans votre navigateur, voici deux solutions :<br />

- la plus simple consiste à changer un petit quelque chose dans votre scène Flash pour<br />

chaque version, par exemple un mot dans un champ texte. Si le nouveau mot est bi<strong>en</strong><br />

celui que vous voyez dans la page web, vous voyez bi<strong>en</strong> la nouvelle version de votre<br />

SWF. Dans le cas contraire, supprimez le SWF et la page html générée, et faites une<br />

nouvelle publication depuis Flash, ou bi<strong>en</strong>…<br />

- la seconde solution consiste à vider le cache de votre navigateur. Chaque navigateur<br />

possède cette fonctionnalité, mais de façon différ<strong>en</strong>te (effacer tout, effacer la dernière<br />

heure, effacer que certains types de fichiers, etc.). A vous de voir comm<strong>en</strong>t procéder<br />

sur vos machines, mais si le cache est vidé avant de faire votre publication depuis<br />

Flash, normalem<strong>en</strong>t vous aurez toujours la dernière version du SWF dans la page<br />

HTML.<br />

6.2 Exemple 2 : <strong>en</strong>voi discret des données et traitem<strong>en</strong>t après<br />

exécution du PHP<br />

L’exemple précéd<strong>en</strong>t fonctionne très bi<strong>en</strong>, mais il a l’inconvéni<strong>en</strong>t d’<strong>en</strong>voyer les données<br />

dans l’adresse de la page PHP, ce qui n’est pas discret, par exemple pour un login/mot de<br />

passe.<br />

Nous allons voir ici une version améliorée de l’exemple précéd<strong>en</strong>t <strong>en</strong> masquant les données<br />

<strong>en</strong>voyées (POST au lieu de GET), et nous allons <strong>en</strong> profiter pour faire exécuter du code AS3<br />

Flash : Découverte d’Action Script Page 13 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

quand Flash reçoit des données de PHP. Ainsi, vous saurez <strong>en</strong>voyer, recevoir, et traiter des<br />

données circulant <strong>en</strong>tre Flash et PHP. De plus, dans cet exemple, on ne change pas de page ;<br />

Flash <strong>en</strong>voie des données à PHP qui à son tour <strong>en</strong> <strong>en</strong>voie à Flash, tout ça dans la même page<br />

web.<br />

Ouvrez « <strong>en</strong>voi discret de données à PHP.fla » er regardez le code AS3. Il conti<strong>en</strong>t <strong>en</strong>tre<br />

autre :<br />

- Une différ<strong>en</strong>ce pour l’<strong>en</strong>voi des données (variable de type URLLoader) ;<br />

- Une fonction qui traite les donnés r<strong>en</strong>voyées par PHP ;<br />

- 3 façons de traiter les données r<strong>en</strong>voyées par PHP.<br />

Code PHP<br />

<strong>Le</strong> code PHP est décomposé comme suit :<br />

- Une fonction qui permet d’<strong>en</strong>voyer des données à Flash<br />

- La récupération des données prov<strong>en</strong>ant de Flash<br />

- L’écriture de ces données dans un fichier texte<br />

- L’<strong>en</strong>voi de données à Flash (ici, principalem<strong>en</strong>t la variable nom qui conti<strong>en</strong>t « Master<br />

IPM »).<br />

Concernant l’<strong>en</strong>voi de données à Flash, j’ai choisi de les <strong>en</strong>voyer <strong>en</strong> les <strong>en</strong>tourant des<br />

nombres 12 et 34 (ceci est totalem<strong>en</strong>t arbitraire et vous pouvez utiliser ce que vous voulez, <strong>en</strong><br />

général on utilise des boolé<strong>en</strong>s ou des 1). Ainsi, si on veut que PHP <strong>en</strong>voie à Flash la variable<br />

Message valant "Coucou", on <strong>en</strong>verra la chaine "résultat=12&Message=Coucou&fin=34".<br />

Pourquoi fait-on cela ? La raison est simple : on veut être sûr que Flash a reçu toutes les<br />

données avant de les traiter. Or, on ne sait pas nécessairem<strong>en</strong>t combi<strong>en</strong> de données doiv<strong>en</strong>t<br />

être reçues. Par contre, si on sait qu’on doit toujours avoir reçu « 12 » au début et « 34 » à la<br />

fin (ou autres valeurs de votre choix), et qu’on reçoit bi<strong>en</strong> ces « 12 » et « 34 » alors on a reçu<br />

tout ce qui est <strong>en</strong>tre les deux, c'est-à-dire les données au complet, donc on peut les traiter.<br />

Cette solution est très souv<strong>en</strong>t utilisée. Il existe cep<strong>en</strong>dant des façons plus élégantes, mais<br />

demandant plus de bagages techniques. Par exemple, on utilise souv<strong>en</strong>t AMFPHP<br />

(http://amfphp.sourceforge.net/ ou http://www.amfphp.org) pour être plus efficace, mais vous<br />

n’avez pas besoin de regarder cela pour IPM.<br />


{<br />

MASTER IPM EAD 2010-2012 J.C. Tarby<br />

$message = utf8_decode($message);<br />

$destinataire = utf8_decode($destinataire) ;<br />

$sujet = utf8_decode($sujet) ;<br />

$unMessage ="Destinataire : ".$destinataire ." Sujet : " . $sujet ."<br />

\n Message : ".$message." \n";<br />

}<br />

else<br />

{<br />

}<br />

?><br />

// écriture des données dans le fichier lesMessages.txt<br />

$fichier=fop<strong>en</strong>("lesMessages.txt","a");<br />

fputs($fichier,$unMessage);<br />

fclose($fichier);<br />

/*<br />

Pour que l'<strong>en</strong>voi de données vers AS3 fonctionne,<br />

il faut <strong>en</strong>voyer la première donnée sous la forme<br />

echo "variable=valeur", ou echo "variable=".utf8_<strong>en</strong>code(valeur),<br />

et les données suivantes seront <strong>en</strong>voyées par<br />

echo "&variable=valeur", ou <strong>en</strong>voi(variable, valeur).<br />

On peut aussi faire echo "variable=valeur&variable=valeur..."<br />

*/<br />

echo "resultat=12";<br />

<strong>en</strong>voi("nom", "Master IPM");<br />

<strong>en</strong>voi("fin",34);<br />

echo "resultat=0";<br />

Figure 4 : <strong>Le</strong> formulaire Flash avant l’<strong>en</strong>voi des données à PHP<br />

Flash : Découverte d’Action Script Page 15 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Figure 5 : <strong>Le</strong> formulaire Flash après le retour des données de PHP<br />

Flash : Découverte d’Action Script Page 16 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

7 PHP et MySQL<br />

Maint<strong>en</strong>ant que vous savez <strong>en</strong>voyer et recevoir des données <strong>en</strong>tre Flash et PHP, vous aimeriez<br />

peut-être travailler avec des bases de données. Cela est tout à fait possible <strong>en</strong> effet, mais nous<br />

sommes ici hors du cadre du <strong>cours</strong> pour vous. Cep<strong>en</strong>dant, je vais vous donner quelques<br />

informations à ce sujet… tout <strong>en</strong> supposant que vous sachiez déjà ce qu’est une base de<br />

données. Si ce n’est pas le cas, vous devrez par exemple consulter des sites tels que wikipedia<br />

pour <strong>en</strong> avoir une idée.<br />

Tout d’abord, faire des bases de données (les créer, les gérer, etc.) est une vraie spécialité<br />

informatici<strong>en</strong>ne. Créer une base avec deux ou trois tables est à la portée que tout le monde ou<br />

presque. Mais une base de données digne de ce nom comporte généralem<strong>en</strong>t des dizaines de<br />

tables, avec des relations complexes <strong>en</strong>tre elles, et elle conti<strong>en</strong>t des milliers, des millions,<br />

voire des milliards d’<strong>en</strong>registrem<strong>en</strong>ts (par exemple la base de données des cli<strong>en</strong>ts de France<br />

Télécom ou de La Redoute).<br />

De telles bases de données ne sont pas écrites <strong>en</strong> PHP et MySQL, mais avec des langages et<br />

outils beaucoup plus performants et robustes (Oracle par exemple). Néanmoins, il est tout à<br />

fait possible de manipuler ces bases de données par une interface <strong>en</strong> Flash. Cela repose sur un<br />

principe similaire à ce que je vais expliquer ci-dessous avec PHP.<br />

Manipuler des données dans une base de données ne peut pas se faire directem<strong>en</strong>t par Flash.<br />

Vous devez passer par un intermédiaire, que ce soit PHP (ou d’autres langages de<br />

programmation) ou d’autres outils (par exemple AMFPHP, http://amfphp.sourceforge.net/, ou<br />

des outils <strong>en</strong>core plus techniques comme des webservices,<br />

http://fr.wikipedia.org/wiki/Webservice). Je ne parlerai ici que de l’utilisation de PHP.<br />

Pour accéder aux données d’une base (pour consulter une base, ajouter des <strong>en</strong>registrem<strong>en</strong>ts,<br />

<strong>en</strong> supprimer, etc.), on doit donc nécessairem<strong>en</strong>t passer par du code PHP. Flash ne sert que<br />

d’affichage ou de zone de saisie ; ce n’est pas lui qui modifie la base de données, c’est PHP.<br />

Pour faire simple, pr<strong>en</strong>ons un exemple. Imaginons que nous ayons une base de données de<br />

cli<strong>en</strong>ts et que nous voulions afficher tous les cli<strong>en</strong>ts du Nord (code postal = 59). Dans ce cas :<br />

- vous avez une interface <strong>en</strong> Flash qui vous permettra de saisir cette information (par<br />

exemple un champ texte où vous taperez 59 ou bi<strong>en</strong> <strong>en</strong>core une liste des codes postaux<br />

dans laquelle vous cliquerez le code postal 59) et d’<strong>en</strong>voyer cette information (par<br />

exemple avec un bouton Valider).<br />

- Une fois que vous avez saisi votre information (le code postal 59), votre validation<br />

appelle un code PHP spécifique <strong>en</strong> lui passant <strong>en</strong> paramètre le code postal 59. Ce code<br />

PHP a pour objectif de :<br />

1. récupérer le ou les paramètres <strong>en</strong>voyés par Flash (ici le code postal, mais on<br />

aurait pu imaginer une requête où on demande tous les cli<strong>en</strong>ts femme du 59,<br />

c'est-à-dire un paramètre pour le sexe et un paramètre pour le code postal) ;<br />

2. exécuter le traitem<strong>en</strong>t correspondant sur la base de données ; ici, le code PHP<br />

va extraire tous les cli<strong>en</strong>ts du Nord depuis la base de données.<br />

3. r<strong>en</strong>voyer à Flash les données extraites. On suppose ici que seuls les noms,<br />

prénoms, et emails sont r<strong>en</strong>voyés à Flash.<br />

- Flash récupère les données r<strong>en</strong>voyées par PHP (dans un format qui a été déterminé à<br />

l’avance bi<strong>en</strong> sûr) et les affiche par exemple dans une liste ou dans une table.<br />

- Si l’utilisateur veut avoir des informations supplém<strong>en</strong>taires lorsqu’il clique sur un<br />

cli<strong>en</strong>t dans la liste créée ci-dessus, ce clic doit appeler un code PHP <strong>en</strong> lui passant <strong>en</strong><br />

Flash : Découverte d’Action Script Page 17 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

paramètre toutes les informations nécessaires (par exemple l’email du cli<strong>en</strong>t). On<br />

retrouve donc le même principe que précédemm<strong>en</strong>t (Flash <strong>en</strong>voie à PHP des données<br />

que PHP traite, puis PHP r<strong>en</strong>voie un résultat à Flash qui l’affiche).<br />

- Si on veut supprimer un cli<strong>en</strong>t <strong>en</strong> cliquant dessus puis <strong>en</strong> cliquant sur un bouton<br />

Supprimer, même principe : on appelle un script PHP spécifique.<br />

Je ne détaille pas ici comm<strong>en</strong>t faire tout cela puisque ceci est <strong>en</strong> dehors du <strong>cours</strong>. Cep<strong>en</strong>dant,<br />

vous pouvez consulter le petit tutoriel <strong>en</strong> deux <strong>partie</strong>s ci-dessous, sans oublier de lire<br />

att<strong>en</strong>tivem<strong>en</strong>t (pour votre culture) les problèmes de sécurité que tout informatici<strong>en</strong> se doit de<br />

connaître.<br />

- Tutoriel <strong>partie</strong> 1 :<br />

http://ressources.mediabox.fr/tutoriaux/flashplatform/dynamique/php/communication_<br />

php_as3<br />

- Tutoriel <strong>partie</strong> 2 :<br />

http://ressources.mediabox.fr/tutoriaux/flashplatform/dynamique/php/communication_<br />

php_as3/ecriture<br />

- Problèmes de sécurité (injection de code) :<br />

http://flash.mediabox.fr/index.php?/topic/129390-pied-a-letrier-as3-acceder-a-unebase-via-phpmysql/<br />

Flash : Découverte d’Action Script Page 18 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

8 Appeler une page web navigateToURL<br />

8.1 Préambule<br />

Avec les problèmes de piratage et autres « hacking », Internet a vu se développer beaucoup de<br />

stratégies de sécurité. Flash fait de même. Au temps de Flash MX 2004 (c'est-à-dire <strong>en</strong>viron<br />

jusqu’<strong>en</strong> 2005), il était facile d’écrire une page web cont<strong>en</strong>ant du Flash et pouvant accéder à<br />

d’autres pages web, y compris sur d’autres sites. A prés<strong>en</strong>t, ceci est révolu, et les paramètres<br />

de sécurité ont fait leur apparition. Nous n’allons pas détailler ceci, mais je voudrais juste<br />

vous y s<strong>en</strong>sibiliser avec quelques mots plus bas.<br />

Note : ces aspects concern<strong>en</strong>t un niveau avancé dans Flash. Si vous devez travailler sur<br />

ce sujet, qui n’est pas simple, consultez l’aide pour plus de précisions, <strong>en</strong> utilisant les<br />

mots-clés « La sécurité dans Flash Player » dans la zone de saisie de recherche.<br />

8.2 Paramètres de publication de Flash CS3<br />

La f<strong>en</strong>être des paramètres de publication de Flash CS3 (m<strong>en</strong>u Fichier>Paramètres de<br />

publication, ou CTRL+MAJ+F12) permet de choisir <strong>en</strong>tre deux « stratégies » pour la<br />

sécurité (cf. Figure 6) : accès au réseau uniquem<strong>en</strong>t, ou accès aux fichiers<br />

locaux uniquem<strong>en</strong>t. Dans ce second cas, toute t<strong>en</strong>tative d’accès à des pages web sera<br />

refusée par Flash et provoquera l’affichage d’une page du site de Adobe (donc obligation<br />

d’être connecté à Internet, sinon aucune chance de résoudre le problème !). Cette page est une<br />

page qui vous permet de régler/définir les paramètres d’accès de Flash à Internet.<br />

Si votre animation (par exemple celle prés<strong>en</strong>tée sur la Figure 7) est <strong>en</strong> mode « accès aux<br />

fichiers locaux uniquem<strong>en</strong>t » et que vous t<strong>en</strong>tez d’<strong>en</strong>freindre le mode de sécurité, par exemple<br />

<strong>en</strong> voulant accéder à la page Web http://www.univ-lille1.fr, vous obti<strong>en</strong>drez un message<br />

d’alerte (cf. Figure 8).<br />

• Si vous cliquez sur OK, vous n’accéderez plus à la page web voulue, sauf si vous<br />

rechargez l’animation (ou la page).<br />

• Si vous cliquez sur « Paramètres… », vous obt<strong>en</strong>ez la page de sécurité chez Adobe<br />

(cf. Figure 9). Choisissez alors le 3 ème onglet (cf. Figure 10), puis choisissez<br />

« Ajouter… » dans le m<strong>en</strong>u (cf. Figure 11). Vous obt<strong>en</strong>ez alors le chemin d’accès<br />

de la dernière animation qui a <strong>en</strong>freint la sécurité. Pour l’ajouter, soit vous faites<br />

un copier-coller de ce chemin dans la zone de texte <strong>en</strong> haut, soit (plus simple !)<br />

vous cliquez sur le bouton « Rechercher des fichiers » qui théoriquem<strong>en</strong>t vous<br />

amène directem<strong>en</strong>t dans le dossier qui conti<strong>en</strong>t l’animation <strong>en</strong> cause (si ce n’est<br />

pas le cas, il vous restera à naviguer dans les dossiers). Dans ce dernier cas, il ne<br />

vous reste plus qu’à la choisir, et vous obt<strong>en</strong>ez alors la Figure 13 qui autorise de<br />

façon perman<strong>en</strong>te l’accès à Internet pour l’animation choisie. Vous pouvez bi<strong>en</strong><br />

évidemm<strong>en</strong>t modifier ses paramètres avec le m<strong>en</strong>u associé.<br />

Flash : Découverte d’Action Script Page 19 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Figure 6 : Paramètres de publication de Flash 8<br />

Figure 7 : Une animation qui laisse p<strong>en</strong>ser qu’on peut accéder à Internet<br />

Flash : Découverte d’Action Script Page 20 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Figure 8 : Message d’alerte de sécurité du lecteur Flash<br />

Figure 9 : page d’Adobe permettant de régler les paramètres de sécurité<br />

Figure 10 : Paramètre globaux de sécurité (3 ème onglet)<br />

Flash : Découverte d’Action Script Page 21 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

Figure 11 : M<strong>en</strong>u permettant d’ajouter, supprimer, modifier des accès<br />

Figure 12 : Affichage du dernier accès refusé<br />

Figure 13 : Autorisation perman<strong>en</strong>te de l’application précisée<br />

Flash : Découverte d’Action Script Page 22 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

8.3 La fonction navigateToURL<br />

La fonction navigateToURL de Flash pr<strong>en</strong>d deux paramètres, dont seul le premier est<br />

obligatoire. La syntaxe de la fonction est : navigateToURL(request:URLRequest,<br />

window:String).<br />

• request: toute URL est valide, par exemple http://www.free.fr (le http:// est<br />

obligatoire !), ftp://www.download.com, ou mailto:jean-claude.tarby@univlille1.fr,<br />

ou <strong>en</strong>core javascript:alert('coucou'). Comme toute URLRequest,<br />

vous pouvez y associer des données (des variables par exemple), une méthode d’<strong>en</strong>voi<br />

(GET/POST), etc.<br />

• windows: Spécifie la f<strong>en</strong>être ou le cadre HTML dans lequel le docum<strong>en</strong>t doit se<br />

charger. Vous pouvez ignorer ce paramètre, <strong>en</strong>trer le nom d'une f<strong>en</strong>être spécifique ou<br />

le sélectionner à partir des noms réservés suivants :<br />

o _self spécifie le cadre actif de la f<strong>en</strong>être <strong>en</strong> <strong>cours</strong> d'utilisation.<br />

o _blank crée une f<strong>en</strong>être.<br />

o _par<strong>en</strong>t appelle le par<strong>en</strong>t du cadre actif.<br />

o _top sélectionne le cadre de plus haut niveau de la f<strong>en</strong>être active.<br />

Vous pouvez égalem<strong>en</strong>t utiliser le nom d’un cadre existant, ou d’une f<strong>en</strong>être web.<br />

Vous pouvez voir un exemple de cette fonction dans « navigateToURL.fla ». Pour tester<br />

correctem<strong>en</strong>t, vous devez publier l’animation (touche F12) et pas simplem<strong>en</strong>t la tester dans<br />

Flash. Dans la f<strong>en</strong>être web qui s’ouvrira après la publication, le premier bouton vous <strong>en</strong>voie à<br />

http://www.univ-lille1.fr/ et le second à adresse semblable à celle-ci-dessous :<br />

http://www.univ-lille1.fr/?exampleUserLabel=Master%20IPM&exampleSessionId=1299611211466.<br />

Cette deuxième page vous affichera le même cont<strong>en</strong>u que la première car le site de Lille 1 ne<br />

pr<strong>en</strong>d pas <strong>en</strong> compte les paramètres que vous <strong>en</strong>voyez, mais vous noterez que les paramètres<br />

affichés dans l’URL sont ceux qui ont été construits par le code AS3 (voir ci-dessous).<br />

univ_Lille1_btn.addEv<strong>en</strong>tList<strong>en</strong>er(MouseEv<strong>en</strong>t.CLICK, lille1);<br />

univ_Lille1_Données_btn.addEv<strong>en</strong>tList<strong>en</strong>er(MouseEv<strong>en</strong>t.CLICK, lille1_données);<br />

function lille1(evt:MouseEv<strong>en</strong>t):void<br />

{<br />

var url:String = "http://www.univ-lille1.fr";<br />

var request:URLRequest = new URLRequest(url);<br />

navigateToURL(request);<br />

}<br />

function lille1_données(evt:MouseEv<strong>en</strong>t):void<br />

{<br />

var url:String = "http://www.univ-lille1.fr";<br />

var variables:URLVariables = new URLVariables();<br />

variables.exampleSessionId = new Date().getTime();<br />

variables.exampleUserLabel = "Master IPM";<br />

var request:URLRequest = new URLRequest(url);<br />

request.data = variables;<br />

navigateToURL(request);<br />

}<br />

Flash : Découverte d’Action Script Page 23 sur 24


MASTER IPM EAD 2010-2012 J.C. Tarby<br />

9 C’est fini !<br />

Et voilà, nous voici arrivés à la fin de ce <strong>cours</strong> Flash et AS3. J’espère que vous avez appris<br />

beaucoup de choses et pris du plaisir à les mettre <strong>en</strong> pratique. Si vous voulez approfondir<br />

Flash et AS3, il y a <strong>en</strong>core une foule de choses que nous n’avons pas abordées, mais qui ne<br />

sont pas du ressort d’un IPM (je vous le rappelle pour la dernière fois ☺ ).<br />

Flash : Découverte d’Action Script Page 24 sur 24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!